Skip to content

Commit

Permalink
main: add support to choose reference actions to be used for inference
Browse files Browse the repository at this point in the history
  • Loading branch information
oso committed Nov 11, 2013
1 parent 27de02a commit 7f3286c
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 30 deletions.
47 changes: 46 additions & 1 deletion main.py
Expand Up @@ -7,6 +7,7 @@
from mcda.types import Criteria, CriteriaValues, CriterionValue
from mcda.types import PerformanceTable, Alternatives
from mcda.types import Alternative, AlternativePerformances
from mcda.types import AlternativeAssignment, AlternativesAssignments
from mcda.types import Thresholds, Threshold
from mcda.generate import generate_categories
from mcda.generate import generate_categories_profiles
Expand Down Expand Up @@ -219,6 +220,7 @@ def __clear_tables(self):
self.table_indiff.reset_table()
self.table_pref.reset_table()
self.table_veto.reset_table()
self.table_refs.reset_table()

def same_pq_thresholds_for_all_profiles(self):
if self.ppt:
Expand Down Expand Up @@ -388,7 +390,7 @@ def __enable_buttons(self):
self.button_add_profile.setEnabled(True)
self.button_del_profile.setEnabled(True)
self.button_generate.setEnabled(True)
self.button_chooserefs.setEnabled(True)
self.button_chooseassign.setEnabled(True)
self.button_loadxmcda.setEnabled(True)
self.button_savexmcda.setEnabled(True)

Expand Down Expand Up @@ -506,6 +508,49 @@ def on_button_loadxmcda_pressed(self):
self.__clear_tables()
self.__fill_model_tables()

def __generate_category_colors(self):
self.category_colors = {}

ncat = len(self.bpt) + 1
for i in range(1, ncat + 1):
color = QtGui.QColor(0, 255 - 220 * (ncat - i) / ncat, 0)
self.category_colors[i] = color

def on_button_chooseassign_pressed(self):
items = [c.id for c in self.criteria if c.disabled is True]
if len(items) < 1:
QtGui.QMessageBox.information(None, "Error",
"No assignment column")
return

item, ok = QtGui.QInputDialog.getItem(self,
"Select assignments column",
"Column:", items, 0, False)
if ok is False:
return

try:
cid = item.toString()
except:
cid = str(item)

ncat = len(self.bpt) + 1
pt, aa = PerformanceTable(), AlternativesAssignments()
for ap in self.pt:
perf = int(ap.performances[cid])
if perf > 0 and perf < ncat:
pt.append(ap)
aa.append(AlternativeAssignment(ap.id, perf))

a = Alternatives([Alternative(aid) for aid in pt.keys()])

self.table_refs.reset_table()

self.table_refs.add_criteria(self.criteria)
self.table_refs.add_pt(a, pt, False)
self.__generate_category_colors()
self.table_refs.add_assignments(aa, self.category_colors, True)

if __name__ == "__main__":
from PyQt4 import QtGui
from qgis.core import *
Expand Down
Binary file modified tests/data/loulouka/criteria.dbf
Binary file not shown.
22 changes: 8 additions & 14 deletions ui/main_window.py
Expand Up @@ -2,7 +2,7 @@

# Form implementation generated from reading ui file 'ui/main_window.ui'
#
# Created: Sat Nov 9 23:42:22 2013
# Created: Mon Nov 11 13:54:49 2013
# by: PyQt4 UI code generator 4.10.2
#
# WARNING! All changes made in this file will be lost!
Expand Down Expand Up @@ -133,21 +133,17 @@ def setupUi(self, main_window):
self.group_refs.setObjectName(_fromUtf8("group_refs"))
self.verticalLayout_3 = QtGui.QVBoxLayout(self.group_refs)
self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
self.table_refs = QtGui.QTableWidget(self.group_refs)
self.table_refs.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.table_refs = qt_performance_table(self.group_refs)
self.table_refs.setObjectName(_fromUtf8("table_refs"))
self.table_refs.setColumnCount(1)
self.table_refs.setColumnCount(0)
self.table_refs.setRowCount(0)
item = QtGui.QTableWidgetItem()
item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
self.table_refs.setHorizontalHeaderItem(0, item)
self.verticalLayout_3.addWidget(self.table_refs)
self.layout_choose = QtGui.QHBoxLayout()
self.layout_choose.setObjectName(_fromUtf8("layout_choose"))
self.button_chooserefs = QtGui.QPushButton(self.group_refs)
self.button_chooserefs.setEnabled(False)
self.button_chooserefs.setObjectName(_fromUtf8("button_chooserefs"))
self.layout_choose.addWidget(self.button_chooserefs)
self.button_chooseassign = QtGui.QPushButton(self.group_refs)
self.button_chooseassign.setEnabled(False)
self.button_chooseassign.setObjectName(_fromUtf8("button_chooseassign"))
self.layout_choose.addWidget(self.button_chooseassign)
self.button_infer = QtGui.QPushButton(self.group_refs)
self.button_infer.setEnabled(False)
self.button_infer.setObjectName(_fromUtf8("button_infer"))
Expand Down Expand Up @@ -308,9 +304,7 @@ def retranslateUi(self, main_window):
self.tab_thresholds.setTabText(self.tab_thresholds.indexOf(self.tab_veto), _translate("main_window", "Veto", None))
self.tab_parameters.setTabText(self.tab_parameters.indexOf(self.tab_plot), _translate("main_window", "Thresholds", None))
self.group_refs.setTitle(_translate("main_window", "Reference actions", None))
item = self.table_refs.horizontalHeaderItem(0)
item.setText(_translate("main_window", "Category", None))
self.button_chooserefs.setText(_translate("main_window", "Choose reference actions", None))
self.button_chooseassign.setText(_translate("main_window", "Choose assignment column", None))
self.button_infer.setText(_translate("main_window", "Infer parameters", None))
self.group_infparams.setTitle(_translate("main_window", "Parameters", None))
self.label_combo.setText(_translate("main_window", "Electre Tri model:", None))
Expand Down
18 changes: 3 additions & 15 deletions ui/main_window.ui
Expand Up @@ -182,29 +182,17 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QTableWidget" name="table_refs">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<column>
<property name="text">
<string>Category</string>
</property>
<property name="textAlignment">
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
</property>
</column>
</widget>
<widget class="qt_performance_table" name="table_refs"/>
</item>
<item>
<layout class="QHBoxLayout" name="layout_choose">
<item>
<widget class="QPushButton" name="button_chooserefs">
<widget class="QPushButton" name="button_chooseassign">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Choose reference actions</string>
<string>Choose assignment column</string>
</property>
</widget>
</item>
Expand Down

0 comments on commit 7f3286c

Please sign in to comment.