Дипломна работа на Пламена Димитрова Чонгова F18015 на тема програмна система за многокритериален анализ mka 2



страница7/9
Дата10.04.2018
Размер1.16 Mb.
#66645
ТипДиплом
1   2   3   4   5   6   7   8   9




критерии

алтернативи

Техни-ческа поддръжка

Поддръжка на бази данни

FTP достъп

SSH шел

Антивирусна защита

SPAM защита

Тами уеб

Съществе-но лошо

(ниско)

0

0

1

1

1

Креато ООД

Много лошо

(ниско)

0

0

1

1

1

Гото.бг ЕООД

Лошо

(ниско)

0

1

1

1

1

Ден България ЕООД

Изключи-

телно добро

(високо)

0

1

1

0

0

Bulhost

Съществе-но добро

(високо)

0

1

0

0

0

FCOLOR.BG – мега пак

Съществе-но добро

(високо)

1

1

1

0

0

FCOLOR.BG – миди пак

Съществе-но добро

(високо)

0

1

1

1

1

FCOLOR.BG – мини пак

Съществе-но добро

(високо)

1

1

1

1

1

ICD Soft

Средно

(Задоволи-

телно)

1

0

1

1

1

Хостинг ООД – персонален

Лошо

(ниско)

0

0

0

0

0

Хостинг ООД – малък бизнес

Лошо

(ниско)

1

0

1

0

0

Хостинг ООД – корпоративен

Лошо

(ниско)

0

1

0

0

0

Таблица. 1.


Методът ELECTRE изисква ЛВР да зададе допълнителна информация за всеки един от критериите. Информацията е следната:
Месечна цена

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 2

  • Праг на предпочитание = 5

  • Изчислителни единици на прага = “Абсолютни”

  • Единици = ” лв.”


Годишна цена

  • Тегло = 1

  • Вето праг – 90%

  • Праг на безразличие = 4%

  • Праг на предпочитание = 10%

  • Изчислителни единици на прага = “Процентни”

  • Единици = ” лв.”


Пространство

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 5%

  • Праг на предпочитание = 10%

  • Изчислителни единици на прага = “ Процентни”

  • Единици = ”MB”


Месечен трансфер

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 5%

  • Праг на предпочитание = 10%

  • Изчислителни единици на прага = “ Процентни”

  • Единици = ”MB”


Брой пощенски кутии

  • Тегло = 1

  • Вето праг = 1000

  • Праг на безразличие = 1

  • Праг на предпочитание = 5

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ”бр.”


Надеждност

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 0

  • Праг на предпочитание = 2

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””


Техническа поддръжка

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 1

  • Праг на предпочитание = 2

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””


Поддръжка на бази данни

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 0

  • Праг на предпочитание = 0.5

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””


FTP достъп

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 0

  • Праг на предпочитание = 0.5

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””


SSH шел

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 0

  • Праг на предпочитание = 0.5

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””


Антивирусна защита

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 0

  • Праг на предпочитание = 0.5

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””


SPAM защита

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 0

  • Праг на предпочитание = 0.5

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””

Получените резултати са сортирани в низходящ ред:




Позиция

Алтернатива

Стойност

1.

Гото.бг ЕООД

11

2.

FCOLOR.BG – мини пак

10

3.

ICD Soft

10

4.

FCOLOR.BG – мега пак

9

5.

FCOLOR.BG – миди пак

9

6.

Ден България ЕООД

6

7.

Bulhost

6

8.

Хостинг ООД – малък бизнес

5

9.

Хостинг ООД – корпоративен

5

10.

Креато ООД

4

11.

Тами уеб

2

12.

Хостинг ООД – персонален

1

Таблица. 2

Следователно най-добър избор за доставчик на уеб хостинг е Гото.бг ЕООД.
Пример 2:
В компания ЕТ „Пападопулос – Константинос Пападопулос” текущите поръчки за изпълнение за направата на каменни изделия трябва да се подредят в опашка и да се изпълняват според резултатите в нея. Решаваната задача е за ранкиране на изпълнението на поръчки, решава се отново чрез метода ELECTRE ІІІ.

Алтернативите са с идентификационни номера:



  • Поръчка 518

  • Поръчка 685

  • Поръчка 686

  • Поръчка 713

Критериите, определящи подреждането в опашката на поръчките са:



  • Авансово плащане на поръчката (в %) – количествен критерий, който трябва да се максимизира.

  • Приоритет по срок – качествен критерий – трябва да се максимизира

  • Приоритет на клиента – качествен – трябва да се максимизира

  • Комбиниране на материали – количествен – тъй като за този критерий има само две възможности – наличност или отсъствие на еднакви материали за изпълнението на поръчките, има само две възможни стойности – 0 и 1. Критерият трябва да се максимизира.

Матрицата на алтернативите е следната:




критерий

алтернатива

Авансово плащане на поръчката

Приоритет по срок

Приоритет на клиента

Комбиниране на материали

Поръчка 518

10

Средно

(задоволително)

Изключително добро(високо)

0

Поръчка 685

54

Много добро

(високо)

Средно

(задоволително)

1

Поръчка 686

63

Изключително добро(високо)

Средно

(задоволително)

0

Поръчка 713

10

Средно

(задоволително)

Средно

(задоволително)

1

Таблица. 3


Методът ELECTRE изисква от ЛВР задаването на допълнителна информация за всеки от критериите. Информацията е следната:
Авансово плащане на поръчката

  • Тегло = 2

  • Вето праг – не използва вето праг

  • Праг на безразличие = 2

  • Праг на предпочитание = 5

  • Изчислителни единици на прага = “Процентни”

  • Единици = ” лв.”


Приоритет по срок

  • Тегло = 2

  • Вето праг – не използва вето праг

  • Праг на безразличие = 1

  • Праг на предпочитание = 2

  • Изчислителни единици на прага = “Абсолютни”

  • Единици = ””


Приоритет на клиента

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 1

  • Праг на предпочитание = 2

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””


Комбиниране на материали

  • Тегло = 1

  • Вето праг – не използва вето праг

  • Праг на безразличие = 0

  • Праг на предпочитание = 0.5

  • Изчислителни единици на прага = “ Абсолютни”

  • Единици = ””

От получения резултат се вижда, че поръчките следва да се изпълняват в следния ред:




Позиция

Алтернатива

Стойност

1.

Поръчка 685

4

2.

Поръчка 686

4

3.

Поръчка 518

2

4.

Поръчка 713

1

Таблица. 4


Заключение
Задачите на многокритериалния анализ намират широко приложение в практиката. Това е причината за разработването на различни софтуерни системи за подпомагане на решаването на тези задачи.

В дипломната работа се разглежда разработената в ИИТ-БАН софтуерна система за подпомагане на решаването на задачи на многокритериалния анализ MKA-2. В системата са включени четири различни метода, представители на трите групи известни досега методи.

Основната задача на дипломната работа е реализацията и внедряването на алгоритъм за вземане на решения по метода ELECTRE в софтуерната система MKA-2. Резултатите могат да бъдат обобщени както следва:


  • Направен е обзор и анализ на задачите, методите и системите на многокритериалния анализ;

  • Дадено е описание на методите от групата ELECTRE, като е направен аргументиран избор на най-подходящата за целта версия на метода;

  • Методът ELECTRE ІІІ е внедрен и тестван в съществуващата система за вземане на решения MKA-2.

  • Представен е готов софтуерен продукт, който чрез реализация на разработените научни теории да бъде приложим в практиката.

Системата MKA-2 е изследователска система с общо предназначение. Предстои разработката на софтуерната система MKA-WEB за работа в мрежова среда. Освен това на основата на системата MKA-2 за фирма ЕТ ”ПАПАДОПУЛОС – Константинос Пападопулос” е реализирана и проблемно-ориентирана софтуерна система MultiChoice-KP. Фирма ЕТ ”ПАПАДОПУЛОС – Константинос Пападопулос” е специализирана фирма за добив, обработка, доставка, монтаж, поддръжка и реставрация на скално-облицовъчни материали. Задачата й е да подобри планирането и управлението на дейността на фирмата чрез решаване на задачи за многокритериален анализ на инвестиции, заявки и поръчки.
Литература
1. Buchanan, J., Sheppard P., Vanderpooten D., (1999) Project Ranking Using ELECTRE ІІІ, 1-20,

2. Rogers, M., Bruen, M., Maystre L.,(1999) ELECTRE and Decision Support, Kluwer Academic Publishers Boston/Dordrecht/London, 23-85.

3. Brans, J., Mareschal B. (1990). The Promethee Methods for MCDM: the Promcale, Gaia and Bankadviser Software. Readings in Multiple Criteria Decision Aid (A. Carlos, C. Bana Costa, Eds.), Springer-Verlag, Berlin, 216-252.

4. Brans, J. P., B. Mareschal (1994). The PROMCALC & GAIA Decision Support System for Multicriteria Decision Aid. Decision Support System, 12, 297-310.

5. Craig, J., J. Webb (1998). Microsoft Visual Basic 6.0 Developer’s Workshop.

6. Dias, L. C., J. N. Climaco (2000). Additive Aggregation with Variable Interdependent Parameters: The VIP Analysis Software. Journal of Operational Research Society, 51, 1070-1082.

7. Eom, S. B., S. M. Lee, E. B. Kim, C. Somarajan (1998). A Survey of Decision Support System Applications (1988-1994). Journal of Operational Research Society, 49, 2, 109-120.

8. Farquhar, P. (1984). Utility Assessment Methods. Management Science, 30, 1283-1300.

9. Fishburn, P. C. (1970). Utility Theory for Decision Making. John Wiley & Sons, New York.

10. Gardiner, R., D. Vanderpooten (1997). Interactive Multiple Criteria Procedures: Some Reflection. Multicriteria Analysis (J. Climaco, Ed.), Springer, 290 – 301.

11. Hamalainen, R. P., H. Lauri (1993). HIPRE 3+Decision Support Software vs 3.13, User’s Guide. Systems Analysis Laboratory, Helsinki University of Technology.

12. Huang, C., K. Yoon (1981). Multiple Attribute Decision Making. Methods and Applications. Springer Verlag, Berlin.

13. Jaszkiewicz, A., R. Slowinski (1994). The Light Beam Search Over a Non-Dominated Surface of a Multiple-Objective Programming Problem. Mutiple Criteria Decision Making, (G. Tzeng, H. Wang, U. Wen, P. Yu, Eds.), Spinger-Verlag, 87-99.

14. Jaszkiewicz, A., R. Slowinski (1997). The LBS-Discrete Interactive Procedure for Multiple Criteria Analysis of Decision Problems. Multicriteria Analysis (J. Climaco, Ed.), Springer-Verlag, Berlin, 320-330.

15. Keeney, R., H. Raiffa (1976). Decisions with Multiple Objectives. John Wiley & Sons, New York.

16. Koksalan, M., M. H. Karwan, S. Zionts (1984). An Improved Method for Solving Multiple Criteria Problems Involving Discrete Alternatives. IEEE Transactions on Systems, Man and Cybernetics, 44, 24-34.

17. Korhonen, P. (1988). A Visual Reference Direction Approach to Solving Discrete Multiple Criteria Problems. European Journal of Operational Research, 34, 152-159.

18. Lotfi, V., T. J. Stewart, S. Zionts (1992). An Aspiration-Level Interactive Model for Multiple Criteria Decision Making. Computers and Operations Research, 19, 671-681.

19. Marcotte, O., R. Soland (1986). An Interactive Branch and Bound Algorithm for Multiple Criteria Optimization. Management Science, 32, 61-75.

20. Mustajoki, J., R. P. Hamalainen (2000). Web-HIPRE: Global Decision Support by Value Tree and AHP Analysis. INFOR, 38, 208-220.

21. Peterson, C. R. (1994). HIVIEW – Rate and Weight to Evaluate Options. OR/MS Today, April .

22. Wiestroffer, H., S. Narula (1997). The State of Multiple Criteria Decision Support Software. Annals of Operations Research, 72, 299-313.

23. Roy, B. (1990). The Outranking Approach and Foundations of ELECTRE Methods. Readings in Multiple Criteria Decision Aid (A. Carlos, C. Bana Costa, Eds.), Springer-Verlag, Berlin, 156-183.

24. Roy, B. (1991). The Outranking Approach and the Foundations of ELECTRE Methods. Theory and decision, 31, 49-73.

25. Saaty, T. S. (1990). The Analytic Hierarchy Process. RWS Publications, Pittsburgh, Pennsylvania.

26. Salo, A., R. P. Hamalainen (1995). Preference Programming Through Approximate Ratio Comparisons. European Journals of Operational Research, 82, 458-475.

27. Sprague, R. H., E. D. Garson (1982). Building Effective Decision Support System. Prentice-Hall, Englewood Cliffs, New Jersey.

28. Steuer, R. (1986). Multiple Criteria Optimization: Theory, Computation, and Applications. John Wiley & Sons, Inc., New York.

29. Sun, M., R. Steuer (1996). InterQuad: An Interactive Quad Free Based Procedure for Solving the Discrete Alternative Multiple Criteria Problem. European Journal of Operational Research, 89, 462-472.

30. Vassileva, M. (2001). An Optimizationally Motivated Interactive Method for Solving a Class of Discrete Multicriteria Choice Problems. Cybernetics and Information Technologies, 2, 63-70.

31. Vetschera, R. (1994). McView: An Integrated Graphical System to Support Multi-Attribute Decisions, Decision Support Systems, 11, 363-371.

32. Vincke, P. (1992). Multicriteria Decision-Aid. John Wiley & Sons, New York.

33. Wierzbicki, A. P. (1980). The Use of Reference Objectives in Multiobjective Optimization. Multiple Criteria Decision Making Theory and Applications (G. Fandel, T. Gal, Eds.), Springer-Verlag, Berlin, Heidelberg 468-486.

ПРИЛОЖЕНИЕ
Следва кратко описание и програмна реализация на някои основни форми на системата MKA-2. Пълната версия на системата е приложена в CD към дипломната работа.

MDIForm1

Системата МКА-2 е изградена на принципа на многодокументарния интерфейс (MDI). Главната форма (родителската форма) е MDIForm1. Тя има основна роля в управляващите функции на системата. Една от основните процедури е:



MDIForm_Load – изпълнява се при зареждане на главната форма MDIForm1. Установява кои от използваните в приложението форми ще бъдат визуализирани. Инициализира масива с подсказващи съобщения, извиквайки метода InitMesgArray на обекта G_Mesg. Показва формата Form – която е първата стъпка от попълването на данни за решаване на многокритериална задача и FrmSplash – начална анимация с логото на системата. По подразбиране езикът, който се зарежда е български. Проверява се дали програмата е била извикана с параметър и ако това е така, дали това е направено с валидно име на съществуващ “.mka файл” и дали в него са съхранени някакви стъпки. Ако подаденият параметър не е валиден “.mka файл”, се извежда съобщение за грешка.
Private Sub MDIForm_Load()

Dim param As String

Dim fResult As Integer

Dim ShowAtStartup As Boolean

AHPrezultFlag = False

OpenFlag = False

choose_option_from_menu = ""

AHPrezultVisible = False

Domination_ListVisible = False

frmOptionsVisible = False

Form1Visible = False

Form2Visible = False

Form3Visible = False

Form5Visible = False

Form6Visible = False

Form9Visible = False

Form10Visible = False

LanguageVisible = False

MethodsVisible = False

PrometheeVisible = False

ElectreVisible = False

frmTipVisible = False

frmMessVisible = False

GraphFormVisible = False

pbimVisible = False

SolveVisible = False

ValueVisible = False

IntervalVisible = False

PrinterVisible = False

RankCriteriaVisible = False

FormArrangingAltVisible = False

FormYes_No_ArrangingAltVisible = False

Form5ComboFlag = True

ArrAltFlatScrolFlag = True

ExitFlag = False

RemoveCritHaveElement = False

CheckDataIsPassed = False

ReDim RemoveCrit(0, 1)

ReDim RemOrEditCrit(0, 1)

ReDim RemoveAlt(0)

L = 101

EditIndex = -1



Lang = GetSetting(App.EXEName, "Options", "Language", "bg")

L = GetSetting(App.EXEName, "Options", "L", 101)

fResult = GetSystemMetrics(19) '19-mouse present

If fResult = 0 Then G_Mesg.errormsg 243 'G_Mesg.sysmsg 1, "You need a mouse to use this program", "Warning!"

If Screen.Height / Screen.TwipsPerPixelY < 768 Or Screen.Width / Screen.TwipsPerPixelX < 1024 Then G_Mesg.infomsg 248

G_Mesg.debugmsg CStr(Time) + ": MKA-2 is up and running"

there_is_no_dominant = 0

Form1.Show

ShowAtStartup = GetSetting(App.EXEName, "Options", "Show Tips at Startup", 1)

If ShowAtStartup <> 0 Then frmTip.Show

frmSplash.Show

G_Mesg.InitMesgArray

G_Mesg.LoadLanguage

MDIForm1Visible = True

ChangeLanguage_MDIForm1

param = Command

If Not (param = "") Then

If ReadGlobals(param) Then

G_FileName = param

MDIForm1.Caption = ProblemName + " (" + G_FileName + ")" '""""

G_Mesg.debugmsg "----File" + G_FileName + " loaded successful-----"

Form1.Show

Else

G_Mesg.sysmsg 16, "'" + dlg.FileName + "'" + LoadResString(L + 244), " MKA-2 Error Handler"



End If

End If


ChDir App.path

End Sub
Тъй като падащото меню на системата се намира в главната форма, то и процедурите, обработващи избора на елемент от менюто, се намират тук. По-важните от тях са:



mnuHint_Click – изпълнява се при избор на елемента Подсказки на менюто Преглед. Инвертира стойността на булевото свойство Checked на този елемент и ако новата му стойност е True, визуализира формата за подсказки FrmHints и установява стойност True на глобалната променлива ViewHint. В противен случай извършва обратното.
Private Sub mnuHint_Click()

mnuHint.Checked = Not mnuHint.Checked

If mnuHint.Checked Then

FrmHints.Show

ViewHint = True

Else


FrmHints.Hide

ViewHint = False

End If

End Sub



fNew_Click – изпълнява се при избор на елемента Нова задача на менюто Файл. Ако има несъхранени промени извежда предупредителен прозорец. Ако потребителят избере да запази промените, се извиква функцията fSave_Click. След това се реинициализира средата и някои глобални променливи за нова задача.

Private Sub FNew_Click()

SaveFrm.Show 1, MDIForm1

ResetAll


End Sub
fOpen_Click – изпълнява се при избор на елемента Отвори на менюто Файл. Извежда стандартния диалог за избор на файл на Windows и ако е избран валиден .mka файл то се изпълнява набора от операции, описани в MDIForm_Load.
Private Sub fOpen_Click()

dlg.CancelError = True

On Error Resume Next

dlg.DialogTitle = LoadResString(L + 245) '"Open File"

dlg.Filter = "MultiRank files|*.mka"

dlg.FileName = "*.mka"

dlg.ShowOpen

If dlg.FileName = "*.mka" Then Exit Sub

If ReadGlobals(dlg.FileName) Then

G_FileName = dlg.FileName

MDIForm1.Caption = ProblemName + " (" + G_FileName + ")" '""""

G_Mesg.debugmsg "----File" + G_FileName + " loaded successful-----"

'G_FileChanged = False

Form1.Show

Else

'G_Mesg.sysmsg 16, "'" + dlg.FileName + "'" + " is not a valid MultiChoice file!", "MultiChoice Error Handler"



G_Mesg.sysmsg 16, "'" + dlg.FileName + "'" + LoadResString(L + 244), "MultiRank Error Handler"

End If


End Sub
fSave_Click – изпълнява се при избор на елемента Съхрани на менюто Файл. Проверява дали глобалната променлива, съхраняваща името на файла на решаваната задача, е празна и, ако е така, извежда стандартния диалог за запис на файл на Windows. Съхранява задачата в посочения файл (или в съществуващия такъв, ако променливата, съхраняваща името не е празна) и установява флага за направени промени на False.
Private Sub FSave_Click()

ExitFlag = False

SaveFile

End Sub
mnuUserMan_Click – изпълнява се при избор на елемента Ръководство на потребителя на менюто Помощ. Зарежда файла с ръководството на потребителя в зависимост от установения език.


Private Sub mnuUserMan_Click()

Dim link


If Lang = "bg" Then

link = ShellExecute(hwnd, "Open", "MKA-2 Bul.chm", &O0, &O0, SW_MAXIMIZE)

Else

link = ShellExecute(hwnd, "Open", "MKA-2 Eng.chm", &O0, &O0, SW_MAXIMIZE)



End If

End Sub


FrmStep1

Форма, чрез която се въвежда описание на решавания проблем, алтернативите, критериите и техният тип (количествен, качествен, минимум максимум).

При зареждане на формата се извиква процедурата Form_Load, инициализира се променливата “Form1Visible = True”, вика се процедурата ChangeLanguage_Form1 за превод на формата на съответния език, който е зададен.

Private Sub Form_Load()

Form1Visible = True

ChangeLanguage_Form1

On_Crit = -1

Last_On_Crit = -1

NextBtn.Picture = MDIForm1.ImageList3.ListImages(4).Picture

End Sub
Целта на решаваната задача се задава в текстовото полето Text1.При промяна на текста в полето, се извиква процедурата Text1_Change.

Private Sub Text1_Change()

MDIForm1.Caption = "Solving " + Text1.Text

End Sub
В полето Text2 се въвежда името на критерия, процедурата Text2_KeyDown се извиква при настъпване на събитие “натиснат клавиш” на текстовото поле за въвеждане на критерии. Тя проверява дали натиснатият клавиш е ENTER и ако текстовото поле не е празно, извиква процедурата InsCritBtn_Click за добавяне на критерий в списъка с критерии.

Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyReturn And Text2.Text <> "" Then InsCritBtn_Click

End Sub
Процедура InsCritBtn_Click се извиква при натискане на бутона InsCritBtn, обработва въведения в текстовото поле критерий и го проверява за грешки. Низът се проверява дали съдържа символите “(“ и ”:”. Извършва се проверка за коректност, дали дадения критерий вече не е въведен, ако някое от тях не е удовлетворено се извежда съобщение за грешка.

Private Sub InsCritBtn_Click()

Dim i, found As Integer

Dim Exist As Boolean

Dim Spl() As String

Dim MyStr, ForList As String

Dim EmptyOrNot As String

If Text2.Text <> "" Then

If Len(Text2.Text) > 30 Then

G_Mesg.errormsg 251

Exit Sub


End If

Text2.Text = Trim(Text2.Text)

If EditFlag = False Then

For i = 0 To List1.ListCount - 1

If List1.ListCount > 0 Then

Spl = Split(List1.list(i), "(")

MyStr = Spl(0)

Spl = Split(MyStr, ":")

MyStr = Spl(1)

Else


MyStr = ""

End If


If MyStr = Text2 Then Exist = True

Next


End If

found = InStr(Text2, ":")

If found <> 0 Then

G_Mesg.errormsg 96

Exit Sub

End If


found = InStr(Text2, "(")

If found <> 0 Then

G_Mesg.errormsg 97

Exit Sub


End If

If Exist Then

G_Mesg.errormsg 98

Exist = False

Exit Sub

End If


If On_Crit <> -1 Then Last_On_Crit = On_Crit

If Option3.Value = True Then

ForList = LoadResString(L + 102)

Else


ForList = LoadResString(L + 103)

End If


If EditFlag = False Then

If G_Crit_Number > 0 Then

If RemoveCritHaveElement = True Then

EmptyOrNot = RemoveCrit(UBound(RemoveCrit, 1) - 1, 1)

End If

End If


If EmptyOrNot <> "" Then

RemoveOrChangeCrit "Exist?", Text2.Text

End If

End If


If EditFlag = True Then

If Option1.Value = True Then

List1.RemoveItem EditIndex

List1.AddItem ForList + Text2 + LoadResString(L + 104), EditIndex

ElseIf Option2.Value = True Then

List1.RemoveItem EditIndex

List1.AddItem ForList + Text2 + LoadResString(L + 105), EditIndex

ElseIf Option5.Value = True Then

List1.RemoveItem EditIndex

List1.AddItem ForList + Text2 + LoadResString(L + 106), EditIndex

ElseIf Option6.Value = True Then

List1.RemoveItem EditIndex

List1.AddItem ForList + Text2 + LoadResString(L + 265), EditIndex

End If


EditFlag = False

Text2.Text = ""

Text2.SetFocus

Else


If Option1.Value = True Then

List1.AddItem ForList + Text2 + LoadResString(L + 104)

ElseIf Option2.Value = True Then

List1.AddItem ForList + Text2 + LoadResString(L + 105)

ElseIf Option5.Value = True Then

List1.AddItem ForList + Text2 + LoadResString(L + 106)

ElseIf Option6.Value = True Then

List1.AddItem ForList + Text2 + LoadResString(L + 265)

End If

Text2.Text = ""



Text2.SetFocus

End If


End If

MegaMatrixReady = False

MDIForm1.mMethods.Enabled = False

MDIForm1.mMegaMatrixView.Enabled = False

End Sub
Процедурата List1_DblClick се вика при двойно кликане върху списъка на критериите List1. Критерия, върху който е кликнато, се премахва от списъка и се връща за редакция в текстовото поле за въвеждане на критерии.

Private Sub List1_DblClick()

Dim i As Integer

If List1.ListIndex <= On_Crit Then

If CritType(List1.ListIndex) = "weight" Then

WeightCritCur = 0

For i = 0 To List1.ListIndex

If CritType(i) = "weight" Then

WeightCritCur = WeightCritCur + 1

End If


Next

End If


ViewCrit List1.ListIndex, True

CurCritNumber = List1.ListIndex

End If

End Sub
В полето Text3 се въвежда името на алтернативата, процедурата Text3_KeyDown се извиква при настъпване на събитие “натиснат клавиш” на текстовото поле за въвеждане на алтернативи. Тя проверява дали натиснатият клавиш е ENTER и ако текстовото поле не е празно, извиква процедурата InsAltBtn_Click за добавяне на алтернатива в списъка с алтернативите.



Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyReturn And Text3.Text <> "" Then InsAltBtn_Click

End Sub
Процедурата InsAltBtn_Click се извиква при натискане на бутона InsAltBtn, обработва въведената в текстовото поле алтернатива и проверява дали вече съществува. При опит за повторно въвеждане на дадена алтернатива се извежда съобщение за грешка.

Private Sub InsAltBtn_Click()

If Text3.Text <> "" Then

If Len(Text3.Text) > 30 Then

G_Mesg.errormsg 252

Exit Sub


End If

Text3.Text = Trim(Text3.Text)

For i = 0 To List2.ListCount

If List2.list(i) = Text3 Then Exist = True

Next

If Exist Then



G_Mesg.errormsg 95

Exist = False

Exit Sub

End If


List2.AddItem Text3

Text3.Text = ""

Text3.SetFocus

End If


If On_Crit <> -1 Then Last_On_Crit = On_Crit

MegaMatrixReady = False

MDIForm1.mMethods.Enabled = False

MDIForm1.mMegaMatrixView.Enabled = False

End Sub
Процедурата List2_DblClick се вика при двойно кликане върху списъка на алтернативите List2, алтернативата върху която е кликнато, се премахва от списъка и се връща за редакция в текстовото поле за въвеждане на алтернативи.

Private Sub List2_DblClick()

Text3.Text = List2.Text

List2.RemoveItem (List2.ListIndex)

Text3.SetFocus

If On_Crit >= 0 Then

For i = 0 To G_Alt_Number - 1

If Text3.Text = G_Alt_Names(i) Then

RemoveAlt(UBound(RemoveAlt)) = i

ReDim Preserve RemoveAlt(UBound(RemoveAlt) + 1)

End If

Next


End If

If On_Crit <> -1 Then Last_On_Crit = On_Crit

MegaMatrixReady = False

MDIForm1.mMethods.Enabled = False

MDIForm1.mMegaMatrixView.Enabled = False

End Sub
След натискането на бутона NextBtn е налична достатъчна информация за инициализирането на някои от основните структури (глобални променливи и масиви).

Private Sub NextBtn_Click()

Dim i As Integer

Dim Exist As Boolean

Dim Spl() As String

Dim Spl1() As String

Dim TempCheck As Boolean

Dim EmptyOrNot As Variant

If Form5Visible = True Then

CheckData Form5, Form5.MSFlexGrid1

ElseIf Form6Visible = True Then

CheckData Form6, Form6.MSFlexGrid1

ElseIf FormArrangingAltVisible = True Then

CheckData ArrangingAlt, ArrangingAlt.MSFlexGrid1

End If


G_Qn_Number = 0

G_Ql_Number = 0

G_Rnk_Number = 0

G_Weight_Number = 0

ProblemName = Text1.Text

If MethodsVisible = True Then

Unload Methods

End If


If Domination_ListVisible = True Then

Unload Domination_List

End If

If (List1.ListCount = 0) Or (List2.ListCount = 0) Then



G_Mesg.errormsg 99

Exit Sub


End If

If (List2.ListCount < 2) Then

'wawedi powe4e ot edna alternativi

G_Mesg.errormsg 254

Exit Sub

End If


If (List1.ListCount < 2) Then

'wawedi powe4e ot edin kriterii

G_Mesg.errormsg 255

Exit Sub


End If

G_Crit_Number = List1.ListCount

G_Alt_Number = List2.ListCount

ReDim Preserve G_Crit_Names(List1.ListCount - 1)

ReDim Preserve CritType(List1.ListCount - 1)

ReDim Preserve MinMax(List1.ListCount - 1)

For i = 0 To List1.ListCount - 1

G_Mesg.debugmsg "Adding criterion #" + CStr(i + 1) + ": " + List1.list(i)

Spl1 = Split(List1.list(i), ":")

MinMax(i) = Spl1(0)

Spl = Split(Spl1(1), "(")

G_Crit_Names(i) = Spl(0)

If (Spl(1) = "quantitative)") Or (Spl(1) = "êîëè÷åñòâåí)") Then

CritType(i) = "qn"

G_Qn_Number = G_Qn_Number + 1

End If


If (Spl(1) = "qualitative)") Or (Spl(1) = "êà÷åñòâåí)") Then

CritType(i) = "ql"

G_Ql_Number = G_Ql_Number + 1

End If


If (Spl(1) = "arranged)") Or (Spl(1) = "ðàíæèðàù)") Then

CritType(i) = "rnk"

G_Rnk_Number = G_Rnk_Number + 1

End If


If (Spl(1) = "weight)") Or (Spl(1) = "òåãëîâåí)") Then

CritType(i) = "weight"

G_Weight_Number = G_Weight_Number + 1

End If


Next

G_Mesg.debugmsg "Min or Max for each criterion"

For i = 0 To G_Crit_Number - 1

G_Mesg.debugmsg MinMax(i)

Next

G_Mesg.debugmsg "CritType Vector"



For i = 0 To G_Crit_Number - 1

G_Mesg.debugmsg CritType(i)

Next

ReDim Preserve G_Alt_Names(List2.ListCount - 1)



For i = 0 To List2.ListCount - 1

G_Mesg.debugmsg "Adding alternative #" + CStr(i + 1) + ": " + List2.list(i)

G_Alt_Names(i) = List2.list(i)

Next


G_Mesg.debugmsg "Count of quantitative criteria: " + CStr(G_Qn_Number)

RelativeMatrix.InitMatrix G_Crit_Number, G_Crit_Number

RelativeMatrixAlt.InitMatrix G_Alt_Number, G_Alt_Number

MDIForm1.StatusBar1.Panels(1).Text = LoadResString(L + 84) + CStr(G_Crit_Number)

MDIForm1.StatusBar1.Panels(2).Text = LoadResString(L + 85) + CStr(G_Alt_Number)

GlobalsReady = True

ALLWeightCrit = -1

For i = 0 To G_Crit_Number - 1

If CritType(i) = "weight" Then

ALLWeightCrit = ALLWeightCrit + 1

End If

Next


WeightCritCur = 0

CurCritNumber = 0

If MegaMatrixReady = False And On_Crit = -1 Then

ReDim MegaMatrix(G_Crit_Number - 1, G_Alt_Number - 1)

End If

TempCheck = IsThereAnyChangeInTask



If (TempCheck = True) Then

ExitFlag = False

SaveFrm.Show 1, MDIForm1

ResizeMegaMatrix

If ALLWeightCrit >= 0 Then

AltCombi = (Factoriel(G_Alt_Number) / (2 * Factoriel(G_Alt_Number - 2)))

If ValFromScrolBarIsInit = True Then

EmptyOrNot = ValFromScrolBar(0, 0)

End If

If EmptyOrNot > 0 Then



ResizeDimensionValFromScrolBarMain

ResizeValFromScrolBar

Else

ReDim ValFromScrolBar(ALLWeightCrit, AltCombi - 1)



ValFromScrolBarIsInit = True

End If


End If

If On_Crit >= 0 Then

ViewCrit CurCritNumber, True 'za seldwashtia criterii ima we4e wawedena inf., 4etem ja ot MegaMatrix

Exit Sub


End If

ViewCrit CurCritNumber, MegaMatrixReady

Else

If On_Crit = -1 And WeightCritCur = 0 And ALLWeightCrit >= 0 Then



AltCombi = (Factoriel(G_Alt_Number) / (2 * Factoriel(G_Alt_Number - 2)))

ReDim ValFromScrolBar(ALLWeightCrit, AltCombi - 1)

InitPositionOfTheWeightCrit = False

ResizeDimensionValFromScrolBarMain

ValFromScrolBarIsInit = True

End If


If On_Crit >= 0 Then

ViewCrit CurCritNumber, True 'za seldwashtia criterii ima we4e wawedena inf., 4etem ja ot MegaMatrix

Exit Sub

End If


ViewCrit CurCritNumber, MegaMatrixReady

End If


EditIndex = -1

End Sub
FrmRelativeAlt

Това е форматаза въвеждане на стойностите на алтернативите по отношение на критерии, дефинирани като качествени . Съдържа етикет, показващ текущия критерий; падащ списък, съдържащ скала “много лошо-отлично” с 9 възможни стойности; таблица с две колони, от които едната фиксирана, съдържаща имената на алтернативите, а другата – съответната стойност на алтернативата по скалата. Формата съдържа, също така, вида бутоните – “Напред” и “Назад” за преминаване към следващия и към предходния критерий.

Процедурата LabelAttr надписва фиксираната първа колона на Grid-а с имената на алтернативите.

Public Sub LabelAttr()

Dim i As Integer

MSFlexGrid1.Clear

MSFlexGrid1.Col = 0

For i = 0 To MSFlexGrid1.Rows - 1

MSFlexGrid1.Row = i

MSFlexGrid1.CellAlignment = flexAlignLeftCenter

MSFlexGrid1.Text = G_Alt_Names(i)

Next

Resize MSFlexGrid1, Form5, G_Alt_Number - 1, 0



MSFlexGrid1.Col = 1

End Sub
Процедурата SetCaption установява надписа на етикета Label3, представляващ текущия критерий.

Public Sub SetCaption(St As String)

Form5.Label3.Caption = St

End Sub
Процедурата Combo2_Click обработва събитието “избран елемент от падащия списък”. На текущо избраната алтернатива от таблицата поставя във втората колона избраната от падащия списък стойност. Същата стойност се попълва и в буферния масив TempVals.

Private Sub Combo2_Click()

Dim currentRow As Integer

currentRow = MSFlexGrid1.Row

If Form5ComboFlag = True Then

MSFlexGrid1.Col = 1

MSFlexGrid1.Text = Combo2.Text

MegaMatrix(CurCritNumber, MSFlexGrid1.Row) = Combo2.ItemData(Combo2.ListIndex)

End If

Resize MSFlexGrid1, Form5, G_Alt_Number - 1, 0



MSFlexGrid1.SetFocus

MSFlexGrid1.Col = 1

MSFlexGrid1.Row = currentRow

End Sub
Процедурата Command1_Click обработва събитието “натиснат” за бутона “Напред”. Ако текущият критерий не е първи, се намалява стойността на променливата CurCritNumber с единица. Извиква се процедурата ViewCrit с параметри CurCritNumber и True, като вторият означава, че формата за предишния критерий трябва да бъде попълнена със стойности.

Private Sub Command1_Click()

Dim i As Integer

Dim TestStr As String

If CurCritNumber >= 0 Then

TestStr = ""

MSFlexGrid1.Col = 1

For i = 0 To MSFlexGrid1.Rows - 1

MSFlexGrid1.Row = i

TestStr = TestStr + MSFlexGrid1.Text

Next


If Len(TestStr) = 0 Then

On_Crit = On_Crit - 1

CheckDataIsPassed = True

End If


If CurCritNumber > 0 Then

CurCritNumber = CurCritNumber - 1

If CritType(CurCritNumber) = "weight" Then

WeightCritCur = WeightCritCur - 1

End If

ViewCrit CurCritNumber, True



Else

Unload Me

If Form1Visible = True Then

Form1.SetFocus

Else

Form1.Show



End If

End If


End If

End Sub
Процедурата Command2_Click обработва събитието “натиснат” за бутона “Назад”. Първо обхожда втората колона на таблицата и проверява дали няма непопълнени стойности. Ако има, генерира грешка, извиквайки метода errormsg на обекта “G_Mesg” и напуска процедурата. Ако всички стойности са попълнени, попълват се съответните стойности в масива MegaMatrix.

Private Sub Command2_Click()

Dim i As Integer

MSFlexGrid1.Col = 1

For i = 0 To MSFlexGrid1.Rows - 1

MSFlexGrid1.Row = i

If MSFlexGrid1.Text = "" Then

Error_InCurrentSel i, MSFlexGrid1

G_Mesg.errormsg 91 '"All info must be entered!"

Exit Sub

End If


Next

If CurCritNumber < G_Crit_Number - 1 Then

If RemOrEditCrit(0, 0) <> "" And (IsThisCriterionChangeOrRemove(CurCritNumber + 1)) = False And (IsThisCriterionSet(CurCritNumber + 1)) = False Then

On_Crit = On_Crit + 1

End If

If (CurCritNumber < On_Crit) Then '+ 1 Then



ViewCrit CurCritNumber + 1, True 'za seldwashtia criterii ima we4e wawedena inf., 4etem ja ot MegaMatrix

If On_Crit = CurCritNumber Then On_Crit = On_Crit + 1

CurCritNumber = CurCritNumber + 1

Else


ViewCrit CurCritNumber + 1, False

If On_Crit = CurCritNumber Then On_Crit = On_Crit + 1

CurCritNumber = CurCritNumber + 1

End If


Else

Unload Me

Methods.Show

MegaMatrixReady = True

MDIForm1.mMethods.Enabled = True

MDIForm1.mMegaMatrixView.Enabled = True

End If

End Sub
FrmMethods



Форма за избор на метод за решаване на задачата. При зареждане на формата се извиква процедурата Form_Load, инициализира се променливата MethodsVisible със стойност True. Чрез групата от четири радио-бутона Option1, Option2, Option3 и Option6 се определя метода, по който ще бъде решавана задачата. Групата от два радио бутона Option4 и Option5 се активира след избор на радио-бутон Option3.

Private Sub Form_Load()

Dim i As Integer

ReDim RemOrEditCrit(0, 1)

CenterForm Methods

Command1.Picture = MDIForm1.ImageList3.ListImages(6).Picture

there_is_no_dominant = 0

MethodsVisible = True

ChangeLanguage_Methods

CheckDominant2

G_Mesg.debugmsg "===-Dominant Vector-==="

For i = 0 To G_Alt_Number - 1

G_Mesg.debugmsg CStr(DominantVector(i))

If DominantVector(i) Then

Domination_List.List1.AddItem G_Alt_Names(i)

End If


If DominantVector(i) = False Then

there_is_no_dominant = there_is_no_dominant + 1

End If

Next


If Form3Visible = False And PrometheeVisible = False And ElectreVisible = False And pbimVisible = False And SolveVisible = False Then

Domination_List.Show

Else

If Domination_List.Visible = True Then



Unload Domination_List

End If


End If

End Sub
След натискане на бутона Command1 се извиква процедурата Command1_Click, която проверява стойността True/False на свойството Value на четирите контроли (Option1, Option2, Option3 и Option6).

Ако стойността на Option1.Value е True, се извиква форма FrmRelaticeAdd.

Ако стойността на Option2.Value е True, се извиква форма FrmPromethee. Извикват се процедурите Show и LabelAlt Crit, които са дефинирани във форма FrmPromethee.

Ако стойността на Option6.Value е True, се извиква форма Electre. Извикват се процедурите Show и LabelAlt Crit, дефинирани във форма Electre.

Ако стойността на Option3.Value е True, се проверява кой радио-бутон Option4 или Option5 е избран. Ако е Option4 е избран, се извиква форма Frmpbim, в противен случаи се извиква форма FrmSolve.

Private Sub Command1_Click()

Dim i, j As Integer

Dim mrow As String

Rezult = False

CloseAllWindows 0

G_Mesg.debugmsg "-===MegaMatrix===-"

For i = 0 To G_Alt_Number - 1

mrow = ""

For j = 0 To G_Crit_Number - 1

mrow = mrow + CStr(MegaMatrix(j, i)) + "|"

Next

G_Mesg.debugmsg mrow



Next

If Option1.Value = True Then

Form3.Show

Me.Hide


MDIForm1.StatusBar1.Panels(3).Text = LoadResString(L + 83) + " " + LoadResString(L + 80)

MDIForm1.StatusBar1.Panels(3).Width = TextWidth(LoadResString(L + 83) + LoadResString(L + 80)) * 1.4

Selected_Method = "AHP"

End If


If Option2.Value = True Then

Promethee.Show

Promethee.LabelAlt_Crit

Selected_Method = "Promethee"

MDIForm1.StatusBar1.Panels(3).Text = LoadResString(L + 83) + " " + LoadResString(L + 29)

MDIForm1.StatusBar1.Panels(3).Width = TextWidth(LoadResString(L + 83) + LoadResString(L + 29)) * 1.4

Me.Hide

End If


If Option6.Value = True Then

Electre.Show

Electre.LabelAlt_Crit

Selected_Method = "Electre"

MDIForm1.StatusBar1.Panels(3).Text = LoadResString(L + 83) + " " + LoadResString(L + 258)

MDIForm1.StatusBar1.Panels(3).Width = TextWidth(LoadResString(L + 83) + LoadResString(L + 258)) * 1.4

Me.Hide

End If


If Option3.Value = True Then

pbim.Copy_MegaMatrix_in_PbimMatrix

G_cur_step = -1

G_steps = -1

If Option4.Value = True Then

CurAlternative = ChooseAlternative

Me.Hide

MDIForm1.StatusBar1.Panels(3).Text = LoadResString(L + 83) + " " + LoadResString(L + 81)



Selected_Method = "Partition-Based Interactive Method"

MDIForm1.StatusBar1.Panels(3).Width = TextWidth(LoadResString(L + 83) + LoadResString(L + 81)) * 1.4

pbim.Show

Else


Me.Hide

FirstTime = True

CurAlternative = 0 ' tuka beshe 1

MDIForm1.StatusBar1.Panels(3).Text = LoadResString(L + 83) + " " + LoadResString(L + 81)

Selected_Method = "Partition-Based Interactive Method"

MDIForm1.StatusBar1.Panels(3).Width = TextWidth(LoadResString(L + 83) + LoadResString(L + 81)) * 1.4

Solve.Show

End If


End If

Unload Me

End Sub



Сподели с приятели:
1   2   3   4   5   6   7   8   9




©obuch.info 2024
отнасят до администрацията

    Начална страница