• 1. Мета роботи
  • 2. Теоретичні відомості
  • 2.2 Метод послідовних порівнянь
  • 3. Опис інтерфейсу розробленого програмного продукту
  • 4.1 Клас «CombinationGenerator»
  • 4.2 Клас «ConditionPanel»
  • 4.3 Клас «MainFrame»
  • Список використаної літератури
  • Список використаних програмних засобів


  • Дата конвертації23.03.2017
    Розмір37.92 Kb.
    Типкурсова робота

    Скачати 37.92 Kb.

    Метод послідовних порівнянь

    Федеральне агентство з рибальства

    Федеральне державне освітній заклад

    Вищої професійної освіти

    Мурманський державний технічний університет

    Кафедра обчислювальної математики і програмного забезпечення ЕОМ

    Розрахунково-графічне завдання

    з дисципліни

    Теорія прийняття рішень

    Тема:

    Метод послідовних порівнянь

    Виконав: студент ВТФ, групи П-561

    Воронкова О.В.

    перевірив: Зав. кафедри ВМ і ПО ЕОМ

    Середа В.І.

    Мурманськ 2010


    Зміст

    1. Мета роботи

    2. Теоретичні відомості

    2.1 Експертні методи в дослідженні систем управління

    2.2 Метод послідовних порівнянь

    2.3 Проблеми, для вирішення яких залучаються методи експертних оцінок

    3. Опис інтерфейсу розробленого програмного продукту

    4. Лістинг

    4.1 Клас «CombinationGenerator»

    4.2 Клас «ConditionPanel»

    4.3 Клас «MainFrame»

    висновки

    Список використаної літератури

    Список використаних програмних засобів

    додаток


    1. Мета роботи

    Програмно реалізувати інтерактивний метод послідовних порівнянь


    2. Теоретичні відомості

    2.1Експертние методи в дослідженні систем управління

    Експертні методи спочатку використовувалися в основному в області науки і техніки, а потім почали широко застосовуватися в управлінні та економіці. Сутність цих методів як при вирішенні завдань ІСУ, так і при використанні їх в практиці узагальненого думки (судження) фахівців-експертів з даних питань. Це узагальнена думка виходить в результаті усереднення різними способами думок фахівців-експертів.

    Методи експертних оцінок - Це наукові методи аналізу складних проблем. Експерти проводять інтуїтивно-логічний аналіз проблеми з кількісною оцінкою суджень, з формальної обробкою результатів. Їх узагальнена думка, отримане в результаті обробки індивідуальних оцінок, приймається як вирішення проблеми.

    Ці методи передбачають організацію спеціальної процедури отримання інформації, коли фахівці в області розв'язуваної проблеми (експерти) використовують кількісні методи, як при організації процедури експертної оцінки, так і при обробці її результатів.

    Досліджувані або оцінювані за допомогою методів експертних оцінок об'єкти або явища різняться на основі ознак, характеристик, параметрів, показників. Як правило, кожен показник відображає деяке властивість, характеристику об'єкта.

    У загальному випадку ця властивість може бути виміряна, відображує декількома способами. У той же час, якою б із способів ми не обрали, повинні зберігатися незмінними деякі співвідношення значень показників для різних об'єктів.

    З кожним показником зв'язується з одного боку деяка характеристика, що залишається постійною при будь-яких допустимих способах його вимірювання. А з іншого боку безліч перетворень переходу від допустимого способу вимірювання даного показника до іншого.

    Якщо два показники мають співпадаючі безлічі допустимих перетворень, то кажуть, що показники мають шкалу одного типу.

    Якщо допустимо перетворення: множення на позитивну константу, то відповідна шкала називається «шкалою відносин».

    Якщо до цього перетворенню можна доповнити наступне перетворення: додати константу, така шкала називається «шкалою інтервалів».

    Показники, які мають шкалу не менше досконалу, сем шкала інтервалів, називаються кількісними. Можуть зустрітися показники з т.зв. номінальної шкалою. У цьому випадку встановлюються тільки тотожності або відмінності. Показники з порядковими шкалами прийнято називати якісними.

    При класифікації за ознакою оцінки переваг при прийнятті рішень в даний час найбільш поширені метод рангів, метод безпосереднього оцінювання, метод зіставлень. Він включає в себе два різновиди: парного порівняння і послідовного порівняння.

    2.2 Метод послідовних порівнянь

    Загальним недоліком показників, одержуваних на основі підсумовування балів, є те, що недолік якості по одному з них можна компенсувати за рахунок інших, отримуючи один і той же результат при різної значущості факторів. Тому для підвищення надійності оцінок, значення має виявлення зв'язків і встановлення залежностей між усіма значущими факторами. Встановлення таких залежностей можливо методом послідовних порівнянь (У. Черчмен, Р. Акоф).

    Процедура полягає в наступному. Експертові надається перелік факторів (критеріїв, альтернатив, результатів), які необхідно оцінити по їх відносної важливості і він виробляє ранжування. Найбільш важливого фактору приписується оцінка (вага ) = 1, а іншим оцінки ( ) Між 0 і 1 в порядку відносної важливості.

    Потім експерт встановлює, є фактор з оцінкою 1 важливішим, ніж комбінація інших факторів.

    · Якщо так, то він збільшує оцінку , Щоб вона була більше, ніж сума всіх інших, тобто

    · Якщо немає, то він коригує оцінку (Якщо необхідно), щоб вона була меншою від суми всіх інших, тобто

    Далі визначається, чи є другий фактор з оцінкою важливішим, ніж всі інші. І так далі до фактор А.

    Таким чином, процедура полягає в систематичній перевірці оцінок на базі їх послідовного порівняння.

    Загальна процедура методу наступна:

    1. Впорядкувати результати відповідно до їх значимості (відносної важливістю) з точки зору експерта.

    нехай представляє найбільш важливий результат, - Наступний за ступенем важливості і т. Д., А - Найменш важливий.

    2. Призначити вага 1,00 результату (Тобто = 1,00) та інші ваги всім іншим результатами.

    3. Порівняти

    з + + ... + :

    · якщо краще, треба змінити (в разі необхідності) значення так щоб > + + ... + . При цьому коригування, так само як і при всіх інших, слід прагнути до того, щоб ваги набору ( , і т.д.) залишилися без змін. Далі слід перейти до кроку 4.

    · якщо = + + ... + , То змінити (в разі необхідності) значення , Так щоб виконувалося рівність = + + ... + і потім перейти до кроку 4

    · Якщо результат менш кращий, ніж + + ... + , То змінити значення так, щоб виконувалася нерівність < + + ... + . далі порівняти з + + ... + і повторювати до тих пір, поки буде або краще, або рівноцінний усім іншим результатами.

    4. Порівняти з + ... + і виконати весь крок 3.

    5. Продовжити крок 4 до тих пір, поки не буде виконано порівняння з + .

    6. Перетворити кожне отримане значення в нормоване ', Розділивши відповідні ваги на . В підсумку 'Повинна бути дорівнює 1,00.

    Якщо число результатів більше семи, метод стає громіздким. У цьому випадку застосовується процедура розбиття на підмножини, до кожного з яких застосовується ця процедура.

    експертний послідовний інтерактивний порівняння

    2.3 Проблеми, для вирішення яких залучаються методи експертних оцінок

    Експертні методи спочатку використовувалися в основному в області науки і техніки, а потім почали широко застосовуватися в управлінні та економіці. Сутність цих методів як при вирішенні завдань ІСУ, так і при використанні їх в практиці узагальненого думки (судження) фахівців-експертів з даних питань. Це узагальнена думка виходить в результаті усереднення різними способами думок фахівців-експертів.

    Це наукові методи аналізу складних проблем. Експерти проводять інтуїтивно-логічний аналіз проблеми з кількісною оцінкою суджень, з формальної обробкою результатів. Їх узагальнена думка, отримане в результаті обробки індивідуальних оцінок, приймається як вирішення проблеми.

    Проблеми, для вирішення яких доводиться застосовувати методи експертних оцінок, часто ділять на два класи, кожен з яких певним чином впливає на етапи і процедури проведення експертизи.

    Проблеми першого класу характеризуються тим, що в їх відношенні в цілому є достатня інформація, але вона може носити якісний характер або є Багатокритеріальність, що викликає необхідність залучення експертів. Основні завдання, які в даному випадку доводиться вирішувати при використанні методів експертних оцінок, полягає в пошуку хороших експертів і правильної організації процедури експертизи, при цьому вважають, що групова думка експертів наближається до істинного значення оцінюваних параметрів. В цьому випадку при обробці оцінок широко використовуються методи математичної статистики. Експерти найчастіше використовують порядкову і интервальную шкали.

    Проблеми, що становлять другий клас, що не характеризуються достатньою інформаційним потенціалом. До них частіше ставляться проблеми, що виникають при вирішенні більшості завдань прогнозування. Тут експерти використовують частіше номінальну і порядкову шкали.

    До різновидів експертного методу можна віднести соціологічний аналіз, який заснований на опитуванні, зборі та аналізі думок респондентів. Наприклад, фактичних або потенційних споживачів. Таке опитування і збір думок проводиться зазвичай в письмовій формі (анкети), або усно (конференції, аукціони, виставки).

    При використанні цього методу також слід застосовувати науково-обґрунтовані методи опитування, математичні принципи збору і обробки інформації. Обробка експертних і соціологічних даних, розрахунки заходів узгодженості вимагають трудомістких обчислень. Тому при зборі та обробці результатів експертної та соціологічної інформації використовують обчислювальну техніку і спеціально розроблені програмні продукти.


    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 ();

    conditions.add (indices.clone ());

    }

    }

    Collections.sort (conditions, new Comparator () {

    public int compare (int [] o1, int [] o2) {

    if (o1 [0]

    return -1;

    } Else if (o1 [0] == o2 [0]) {

    if (o1.length

    return -1;

    } Else {

    return 0;

    }

    } Else {

    return 1;

    }

    }

    });

    vec = new Vector ();

    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

    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 ind = new ArrayList ();

    ind.add (0);

    for (int i = 1; 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 sortedInd = new ArrayList ();

    for (int size = values.length - 2; size> 0; size--) {

    List 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

    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

    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

    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

    summ + = values ​​[indices [j]];

    }

    return summ;

    }

    public void norm () {

    int count = values.length;

    float val = values ​​[0];

    for (int i = 0; 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


    Список використаних програмних засобів

    1. NetBeans IDE, version number 6.8

    Додаток 1