ином впливає на етапи і процедури проведення експертизи.
Проблеми першого класу характеризуються тим, що в їх відношенні в цілому є достатня інформація, але вона може носити якісний характер або є багатокритеріальність, що викликає необхідність залучення експертів. Основні завдання, які в даному випадку доводиться вирішувати при використанні методів експертних оцінок, полягає у пошуку хороших експертів і правильної організації процедури експертизи, при цьому вважають, що групова думка експертів наближається до істинного значення оцінюваних параметрів. У цьому випадку при обробці оцінок широко використовуються методи математичної статистики. Експерти найчастіше використовують порядкову і інтервальну шкали.
Проблеми, складові другий клас, не характеризуються достатнім інформаційним потенціалом. До них частіше ставляться проблеми, що виникають при вирішенні більшості завдань прогнозування. Тут експерти використовують частіше номінальну і порядкову шкали.
До різновидів експертного методу можна віднести соціологічний аналіз, який заснований на опитуванні, зборі і аналізі думок респондентів. Наприклад, фактичних або потенційних споживачів. Таке опитування і збір думок виробляється звичайно в письмовій формі (анкети), або усно (Конференції, аукціони, виставки).
При використанні цього методу також слід застосовувати науково-обгрунтовані способи опитування, математичні принципи збору та обробки інформації. Обробка експертних і соціологічних даних, розрахунки заходів узгодженості вимагають трудомістких обчислень. Тому при зборі та обробці результатів експертної та соціологічної інформації використовують обчислювальну техніку і спеціально розроблені програмні продукти.
3. Опис інтерфейсу розробленого програмного продукту
Вікно додатку підрозділяється на дві основні області: область вводу даних для реалізації Методу послідовних порівнянь і область аналізу та виконання зазначеного методу.
-->>
Область введення даних для реалізації методу
Область аналізу та виконання методу
Довжина першої області становить 350 px, довжина другої області - 230 px. Співвідношення довжин областей становить 65%, в свою чергу, золотий перетин представляє відношення 2:3. Таким чином, створений інтерфейс програмного продукту повністю задовольняє вимогам пропорційності.
Пропозиції щодо покращення інтерфейсу: проаналізувавши пропорції елементів управління відносно один одного і краю форми, а також пропорції основних областей форми, можна зробити висновок про коректності побудови спроектованого інтерфейсу.
Альтернативним є варіант організації інтерфейсу, коли основні області: область вводу даних для реалізації методу і область аналізу розташовані на різних вкладках. Однак запропонований альтернативний варіант не є оптимальним з точки зору мінімізації часових інтервалів, оскільки при такому розташуванні основних областей, користувач буде змушений здійснювати зайві переміщення миші між зазначеними областями і зайві кліки по робочій області.
Таким чином, реорганізація аналізованого інтерфейсу не доцільна. Спроектований інтерфейс є оптимальним, лаконічним і простим у використанні.
4. Лістинг
4.1 Клас В«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 [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
a [j] = a [i] + j - i;
}
numLeft = numLeft.subtract (BigInteger.ONE);
return a;
}
}
4.2 Клас В«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
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 ();
}
}
4.3 Клас В«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 vec;
private LinkedList conditions;
private void jButton1ActionPerformed (java.awt.event.ActionEvent evt) {
int value = (Integer) jSpinner1.getValue ();
conditions = new LinkedList ();
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 ();