Класс «CombinationGenerator»
public class CombinationGenerator { private int[] a; private int n; private int r; private BigInteger numLeft; private BigInteger total; public CombinationGenerator(int n, int r) { if (r > n) { throw new IllegalArgumentException(); } if (n < 1) { throw new IllegalArgumentException(); } this.n = n; this.r = r; a = new int[r]; BigInteger nFact = getFactorial(n); BigInteger rFact = getFactorial(r); BigInteger nminusrFact = getFactorial(n - r); total = nFact.divide(rFact.multiply(nminusrFact)); reset(); } //------ // Reset //------ public void reset() { for (int i = 0; i < a.length; i++) { a[i] = i; } numLeft = new BigInteger(total.toString()); } // Return number of combinations not yet generated //------------------------------ public BigInteger getNumLeft() { return numLeft; } //----------------------------- // Are there more combinations? //----------------------------- public boolean hasMore() { return numLeft.compareTo(BigInteger.ZERO) == 1; } // Return total number of combinations //-------------------------- public BigInteger getTotal() { return total; } //------------------ // Compute factorial //------------------ private static BigInteger getFactorial(int n) { BigInteger fact = BigInteger.ONE; for (int i = n; i > 1; i--) { fact = fact.multiply(new BigInteger(Integer.toString(i))); } return fact; } //-------------------------------- // Generate next combination (algorithm from Rosen p. 286) //---------------------------------- public int[] getNext() { if (numLeft.equals(total)) { numLeft = numLeft.subtract(BigInteger.ONE); return a; } int i = r - 1; while (a[i] == n - r + i) { i--; } a[i] = a[i] + 1; for (int j = i + 1; j < r; j++) { a[j] = a[i] + j - i; } numLeft = numLeft.subtract(BigInteger.ONE); return a; } }
Класс «ConditionPanel»
public class ConditionPanel extends javax.swing.JPanel { public ConditionPanel() { initComponents(); } public void setCondition(int indices[], int num) { String s; s = " " + (indices[0] + 1) + " > "; for (int i = 1; i < indices.length - 1; i++) { s += (indices[i] + 1) + " + "; } s += (indices[indices.length - 1] + 1); jLabel1.setText("" + num + ". " + s); } public void check() { jCheckBox1.setSelected(!jCheckBox1.isSelected()); } boolean isSelected() { return jCheckBox1.isSelected(); } }
Класс «MainFrame»
public class MainFrame extends javax.swing.JFrame { /** Creates new form MainFrame */ public MainFrame() { initComponents(); jList1.setCellRenderer(new ListCellRenderer() { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Component comp = (Component)value; comp.setBackground(isSelected ? Color.LIGHT_GRAY : Color.white); return comp; } }); jList1.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { vec.get(jList1.getSelectedIndex()).check(); jList1.updateUI();super.mouseReleased(e); } }); jSpinner1.setValue(2); } private Vector<ConditionPanel> vec; private LinkedList<int[]> conditions; private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int value = (Integer)jSpinner1.getValue(); conditions = new LinkedList<int[]>(); int[] lastNumIndex = new int[value]; for(int num : lastNumIndex) { System.out.println(num); } for (int i = 3; i <= value; i++) { int[] indices; CombinationGenerator x = new CombinationGenerator(value, i); while (x.hasMore()) { indices = x.getNext(); conditions.add(indices.clone()); } } Collections.sort(conditions, new Comparator<int[]>() { public int compare(int[] o1, int[] o2) { if( o1[0] < o2[0] ) { return -1; } else if( o1[0] == o2[0] ) { if(o1.length < o2.length) { return -1; } else { return 0; } } else { return 1; } } }); vec = new Vector<ConditionPanel>(); int num = 1; for(int[] indices : conditions) { ConditionPanel list = new ConditionPanel(); list.setCondition(indices, num); num++; vec.add(list); } jList1.setListData(vec); jList1.updateUI();
} private void jSpinner1StateChanged(javax.swing.event.ChangeEvent evt) { jTable1.setModel(new DefaultTableModel((Integer)jSpinner1.getValue(), 3) boolean[] canEdit = new boolean [] { false, true, true }; @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } @Override public String getColumnName(int column) { String name = ""; switch(column) { case 0: name = "№"; break; case 1: name = "цель"; break; case 2: name = "оценка"; break; } return name; } }); for (int i = 0; i < (Integer)jSpinner1.getValue(); i++){ String s = "" + (1-0.1*i); jTable1.setValueAt(i + 1, i, 0); jTable1.setValueAt("цель " + (i + 1), i, 1); jTable1.setValueAt(s, i, 2); } } private float[] values; private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { jTable1.updateUI(); int count = (Integer)jSpinner1.getValue(); values = new float[count]; for (int i = 0; i < count; i++) { values[i] = Float.parseFloat((String) jTable1.getModel().getValueAt(i, 2)); } if (jRadioButton1.isSelected()) { manualSolve(); } else { automaticSolve(); } } } private void manualSolve() { int i = checkConditions(); if (i !=-1){ JOptionPane.showMessageDialog(this, (i + 1) + " правило не выполнилось. Скорректируйте оценки"); } else{ norm(); JOptionPane.showMessageDialog(this, "Принятые оценки корректны"); } } private void automaticSolve() { ArrayList<Integer> ind = new ArrayList<Integer>(); ind.add(0); for (int i = 1; i < conditions.size(); i++) { int[] currentIndex = conditions.get(i); int[] previousIndex = conditions.get(i - 1); if (currentIndex[0] == previousIndex[0] && currentIndex.length == previousIndex.length) { if (isConditionSelected(i) != isConditionSelected(i - 1)) { JOptionPane.showMessageDialog(this, "Уловия не могут быть выполнены при данных значениях оценок !!!"); return; } } if (currentIndex[0] == previousIndex[0] && currentIndex.length > previousIndex.length) { if (isConditionSelected(i) == true && isConditionSelected(i - 1) == false) { JOptionPane.showMessageDialog(this, "Уловия не могут быть выполнены при данных значениях оценок !!!"); return; } } if(currentIndex.length != previousIndex.length) { ind.add(i); } } { int first = 0; ArrayList<Integer> sortedInd = new ArrayList<Integer>(); for (int size = values.length - 2; size > 0 ; size--) { List<Integer> sublist = ind.subList(first, first + size); Collections.reverse(sublist); sortedInd.addAll(sublist); first += size; } ind = sortedInd; } int n = ind.size(); float delta = 0.01f; for (int i = 0; i < n; i++){ int conditionNum = ind.get(i); int[] cond = conditions.get(conditionNum); boolean solving = calculute(conditionNum, values); boolean selected = isConditionSelected(conditionNum); if (solving != selected) { if (solving) { float value = getSumm(conditionNum, values) - delta; if (value > values[cond[0] + 1]) { values[cond[0]] = value; } else { JOptionPane.showMessageDialog(this, "Уловия не могут быть выполнены при данных значениях оценок"); return; } } else { float value = getSumm(conditionNum, values) + delta; if(cond[0]==0){ values[cond[0]] = value; } else { float d = value - values[cond[0]]; values[cond[0]] = value; for(int j = 0; j < cond[0]; j++) { values[j] += d; } } } } } norm(); JOptionPane.showMessageDialog(this, "Принятые оценки корректны"); } private int checkConditions() { return checkConditions(conditions.size()-1, values); } private boolean isConditionSelected(int numCondition){ return vec.get(numCondition).isSelected(); } private int checkConditions(int lastCondition, float[] values) { for (int i = 0; i <= lastCondition; i++) { boolean selected = isConditionSelected(i); if (calculute(i, values) == !selected) { return i; } } return -1; } private boolean calculute(int i, float[] values) { int[] indices = conditions.get(i); float leftValue = values[indices[0]]; float summ = 0; for (int j = 1; j < indices.length; j++) { summ += values[indices[j]]; } return leftValue > summ; } private float getSumm(int i, float[] values) { int[] indices = conditions.get(i); float summ = 0; for (int j = 1; j < indices.length; j++) { summ += values[indices[j]]; } return summ; } public void norm() { int count = values.length; float val = values[0]; for (int i = 0; i < count; i++) { values[i] = values[i] / val; jTable1.setValueAt("" + values[i], i, 2); } } } Выводы
Основное преимущество методов экспертных оценок – возможность их применения в условиях повышенного риска и неопределенности. Эта неопределенность чаще всего является следствием вероятного характера исследуемых явлений, невозможности точного предсказания окончательных исходов многих процессов и т.д. Привлечение экспертов для принятия решений позволяет снизить уровень неопределенности и повысить достоверность решений. В общем случае предполагается, что мнение группы экспертов надежнее, чем мнение отдельного индивидуума. Главное преимущество групповой оценки заключается в уменьшении различий во мнениях, в возможности получения в какой-то степени обобщенного и более представительного мнения. Специфика и разнообразие решаемых при участии экспертов проблем существенно ограничивает возможности создания единых универсальных правил и моделей экспертизы. Однако можно ориентировочно наметить следующие основные этапы проведения экспертизы: · формулирование цели экспертизы и разработка процедуры опроса; · формирование группы специалистов-аналитиков; · отбор и формирование группы экспертов; · проведение опроса; · анализ и обработка информации, полученной от экспертов; · синтез объективной (статистической) информации и информации, полученной от экспертов, с целью приведения их в форму, удобную для принятия решения. Последовательность и содержание этих этапов будут изменяться в зависимости от реальных условий и ограничений при проведении экспертизы. Математико-статистические методы экспертных оценок получают все более широкое применение в практике принятия решений. Однако существует ряд проблем и задач, требующих дальнейших теоретических исследований и практической проверки. Можно указать на необходимость совершенствования системы отбора экспертов, повышения надежности характеристик группового мнения, разработки методов проверки обоснованности оценок и ряд других. Список использованной литературы
1. Электронный ресурс: Математико-статистические методы в менеджменте, http://window.edu.ru/window_catalog/pdf2txt?p_id=3216&p_page=2 2. Электронный ресурс: Исследование Систем Управления, http://www.uproizvod.ru/index.php?option=com_content&task=view&id=7&Itemid=34&limit=1&limitstart=0
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (287)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |