Example #1
0
 def __init__(self):
     QMainWindow.__init__(self)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.sysConfigFilter = self.tr("System Configuration files (*.xml)")
     self.algConfigFilter = self.tr("Algorithm Configuration files (*.xml)")
     self.ui.result_filename.setText("result" + str(time.time()) + ".csv")
     self.best = None
     translator = QTranslator(qApp)
     translator.load("GUI/Windows/Translations/relopt_ru.qm")
     qApp.installTranslator(translator)
     self.ui.retranslateUi(self)
Example #2
0
 def __init__(self):
     QMainWindow.__init__(self)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.sysConfigFilter = self.tr("System Configuration files (*.xml)")
     self.algConfigFilter = self.tr("Algorithm Configuration files (*.xml)")
     self.ui.result_filename.setText("result"+str(time.time())+".csv")
     self.best = None
     translator = QTranslator(qApp)
     translator.load("GUI/Windows/Translations/relopt_ru.qm")
     qApp.installTranslator(translator)
     self.ui.retranslateUi(self)
Example #3
0
class MainWindow(QMainWindow):
    sysconfig = None
    algconfig = None
    sysconfigfile = None
    algconfigfile = None
    constraints = []

    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.sysConfigFilter = self.tr("System Configuration files (*.xml)")
        self.algConfigFilter = self.tr("Algorithm Configuration files (*.xml)")
        self.ui.result_filename.setText("result"+str(time.time())+".csv")
        self.best = None
        translator = QTranslator(qApp)
        translator.load("GUI/Windows/Translations/relopt_ru.qm")
        qApp.installTranslator(translator)
        self.ui.retranslateUi(self)

    def LoadSysConf(self):
        if self.ui.sysconfname.text() == None or self.ui.sysconfname.text() == '':
            return
        self.sysconfig = SysConfig()
        self.sysconfig.loadXML(self.ui.sysconfname.text())
        self.constraints = []
        if self.sysconfig.limitcost != None:
            self.constraints.append(CostConstraints(self.sysconfig.limitcost))
        if self.ui.checktime_yes.isChecked():
            c = self.sysconfig.getLimitTimes()     
            if c != None:
                self.constraints.append(TimeConstraints(c))

    def LoadAlgConf(self):
        f = open(unicode(self.ui.algconfname.text()), "r")
        dom = xml.dom.minidom.parse(f)
        root = dom.childNodes[0]
        if self.ui.algorithm.currentIndex() == 0 or self.ui.algorithm.currentIndex() == 1:
            self.algconfig = GAConfig()
        #Create object with my algorithm parameter reader
        if self.ui.algorithm.currentIndex() == 4:
            self.algconfig = ACODCConfig()
        self.algconfig.LoadFromXmlNode(root)

    def Run(self):
        if self.sysconfig == None:
            QMessageBox.critical(self, "An error occurred", "System configuration must be defined")
            return
        Module.conf = self.sysconfig
        if self.constraints == None:
            QMessageBox.critical(self, "An error occurred", "Constraints must be defined")
            return
        System.constraints = self.constraints
        if self.algconfig == None and self.ui.algorithm.currentIndex() < 2 :
            QMessageBox.critical(self, "An error occurred", "Algorithm configuration must be defined")
            return
        Algorithm.algconf = self.algconfig
        if Algorithm.algconf == None:
            Algorithm.algconf = AlgConfig()
        if self.ui.use_metamodels.isChecked():
            Algorithm.algconf.use_metamodel = True
            modelidx = self.ui.metamodel.currentIndex()
            if modelidx == 0:
                Algorithm.algconf.metamodel = Averaging()
            elif modelidx == 1:
                Algorithm.algconf.metamodel = KNearestNeighbours(10) #TODO user should define this number
            elif modelidx == 2:
                Algorithm.algconf.metamodel = NeuralNetwork(self.sysconfig) #TODO add settings
            elif modelidx == 3:
                Algorithm.algconf.metamodel = Svr(self.sysconfig)
            elif modelidx == 4:
                Algorithm.algconf.metamodel = Polynomial(self.sysconfig)
            elif modelidx == 5:
                Algorithm.algconf.metamodel = Random()
            Algorithm.algconf.pop_control_percent = float(self.ui.popControl.value())/100.0

        algidx = self.ui.algorithm.currentIndex()
        if algidx==0:
            algorithm = GA()
        elif algidx==1:
            algorithm = HGA()
        elif algidx==2:
            algorithm = Greedy()
        elif algidx==4:
            algorithm = ACODC()
        Algorithm.result_filename = self.ui.result_filename.text()
        for i in range(self.ui.execNum.value()):
            if algorithm.algconf.metamodel:
                algorithm.algconf.metamodel.Clear()
            algorithm.Run()
            algorithm.PrintStats()
            self.best = algorithm.currentSolution
        try:
            os.remove("sch" + str(os.getpid()) + ".xml")
            os.remove("res" + str(os.getpid()) + ".xml")
        except:
            pass

    def OpenSysConf(self):
        name = unicode(QFileDialog.getOpenFileName(filter=self.sysConfigFilter))
        if name == None or name == '':
            return
        self.sysconfigfile = name
        self.ui.sysconfname.setText(name)
        self.LoadSysConf()
        costrange = self.sysconfig.costInterval()
        timerange = self.sysconfig.timeInterval()
        self.ui.maxcost.setText(str(costrange[1]))
        self.ui.mincost.setText(str(costrange[0]))
        self.ui.maxtime.setText(str(timerange[1]).replace("]","").replace("[",""))
        self.ui.mintime.setText(str(timerange[0]).replace("]","").replace("[",""))
        self.ui.limitcost.setText(str(self.sysconfig.limitcost) if self.sysconfig.limitcost != None else "")
        l = []
        for constr in self.constraints:
            if isinstance(constr,TimeConstraints):
                l = constr.limitTimes
        if l == []:
            self.ui.limittimes.setText("")
        else:
            self.ui.limittimes.setText(str(l).replace("]","").replace("[",""))

    def OpenAlgConf(self):
        name = unicode(QFileDialog.getOpenFileName(filter=self.algConfigFilter))
        if name == None or name == '':
            return
        self.algconfigfile = name
        self.ui.algconfname.setText(name)
        self.LoadAlgConf()

    def Random(self):
        d = ConfigDialog()
        d.exec_()
        if d.result() == QDialog.Accepted: 
            dict = d.GetResult()
        else:
            return
        self.sysconfig = SysConfig()
        self.sysconfig.generateRandom(dict)
        costrange = self.sysconfig.costInterval()
        timerange = self.sysconfig.timeInterval()
        self.ui.maxcost.setText(str(costrange[1]))
        self.ui.mincost.setText(str(costrange[0]))
        self.ui.maxtime.setText(str(timerange[1]).replace("]","").replace("[",""))
        self.ui.mintime.setText(str(timerange[0]).replace("]","").replace("[",""))
        self.ui.limitcost.setText("")
        self.ui.limittimes.setText("")
        self.ui.sysconfname.setText("")
        self.constraints = []

    def InputTimeLimits(self):
        if self.ui.limittimes.text() == "":
            return
        for constr in self.constraints:
            if isinstance(constr,TimeConstraints):
                self.constraints.remove(constr)
                break
        l = []
        for c in self.ui.limittimes.text().split(","):
            l.append(int(c))
        self.constraints.append(TimeConstraints(l))
        for m,t in zip(self.sysconfig.modules, l):
            m.limittime = t

    def InputCostLimit(self):
        if self.ui.limitcost.text() == "":
            return
        for constr in self.constraints:
            if isinstance(constr,CostConstraints):
                self.constraints.remove(constr)
                break
        c = int(self.ui.limitcost.text())
        self.constraints.append(CostConstraints(c))
        self.sysconfig.limitcost = c

    def SaveSysConf(self):
        name = unicode(QFileDialog.getSaveFileName(filter=self.sysConfigFilter))
        if name == None or name == '':
            return
        self.sysconfig.saveXML(name)

    def no_checked(self):
        if self.ui.checktime_yes.isChecked():
            return
        for constr in self.constraints:
            if isinstance(constr,TimeConstraints):
                self.constraints.remove(constr)
                break
        self.ui.limittimes.setText("")
        self.ui.limittimes.setEnabled(False)

    def yes_checked(self):
        if not self.ui.checktime_yes.isChecked():
            return
        self.ui.limittimes.setEnabled(True)
        if self.sysconfig == None:
            return
        c = self.sysconfig.getLimitTimes()     
        if c != None:
            self.constraints.append(TimeConstraints(c))
            self.ui.limittimes.setText(str(c).replace("]","").replace("[",""))

    def use_metamodels_checked(self):
        if not self.ui.use_metamodels.isChecked():
            self.ui.metamodel.setEnabled(False)
            self.ui.popControl.setEnabled(False)
        else:
            self.ui.metamodel.setEnabled(True)
            self.ui.popControl.setEnabled(True)

    def ShowMetamodelRes(self):
        d = MetamodelsResDialog()
        d.exec_()
        if not d.result():
            return
        if d.ui.random.isChecked():
            d1 = MetamodelsRes(self.best, True)
        else:
            d1 = MetamodelsRes(self.best, False)
        d1.exec_()
        try:
            os.remove("sch" + str(os.getpid()) + ".xml")
            os.remove("res" + str(os.getpid()) + ".xml")
        except:
            pass
Example #4
0
class MainWindow(QMainWindow):
    sysconfig = None
    algconfig = None
    sysconfigfile = None
    algconfigfile = None
    constraints = []

    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.sysConfigFilter = self.tr("System Configuration files (*.xml)")
        self.algConfigFilter = self.tr("Algorithm Configuration files (*.xml)")
        self.ui.result_filename.setText("result" + str(time.time()) + ".csv")
        self.best = None
        translator = QTranslator(qApp)
        translator.load("GUI/Windows/Translations/relopt_ru.qm")
        qApp.installTranslator(translator)
        self.ui.retranslateUi(self)

    def LoadSysConf(self):
        if self.ui.sysconfname.text() == None or self.ui.sysconfname.text(
        ) == '':
            return
        self.sysconfig = SysConfig()
        self.sysconfig.loadXML(self.ui.sysconfname.text())
        self.constraints = []
        if self.sysconfig.limitcost != None:
            self.constraints.append(CostConstraints(self.sysconfig.limitcost))

    def LoadAlgConf(self):
        f = open(unicode(self.ui.algconfname.text()), "r")
        dom = xml.dom.minidom.parse(f)
        root = dom.childNodes[0]
        if (self.ui.algorithm.currentIndex() == 0
                or self.ui.algorithm.currentIndex() == 1
                or self.ui.algorithm.currentIndex() == 2
                or self.ui.algorithm.currentIndex() == 3
                or self.ui.algorithm.currentIndex() == 4
                or self.ui.algorithm.currentIndex() == 5):
            self.algconfig = GAConfig()
        self.algconfig.LoadFromXmlNode(root)

    def Run(self):
        if self.sysconfig == None:
            QMessageBox.critical(self, "An error occurred",
                                 "System configuration must be defined")
            return
        Module.conf = self.sysconfig
        if self.constraints == None:
            QMessageBox.critical(self, "An error occurred",
                                 "Constraints must be defined")
            return
        System.constraints = self.constraints
        if self.algconfig == None and self.ui.algorithm.currentIndex() < 2:
            QMessageBox.critical(self, "An error occurred",
                                 "Algorithm configuration must be defined")
            return
        Algorithm.algconf = self.algconfig
        if Algorithm.algconf == None:
            Algorithm.algconf = AlgConfig()

        algidx = self.ui.algorithm.currentIndex()
        if algidx == 0:
            algorithm = GA()
        elif algidx == 1:
            algorithm = HGA()
        elif algidx == 2:
            algorithm = GA_optimistic()
        elif algidx == 3:
            algorithm = GA_optimistic_left()
        elif algidx == 4:
            algorithm = GA_Moore()
        elif algidx == 5:
            algorithm = HGA_Moore()
        Algorithm.result_filename = self.ui.result_filename.text()
        for i in range(self.ui.execNum.value()):
            if algorithm.algconf.metamodel:
                algorithm.algconf.metamodel.Clear()
            algorithm.Run()
            self.best = algorithm.currentSolution
        algorithm.PrintStats()
        try:
            os.remove("sch" + str(os.getpid()) + ".xml")
            os.remove("res" + str(os.getpid()) + ".xml")
        except:
            pass

    def OpenSysConf(self):
        name = unicode(
            QFileDialog.getOpenFileName(filter=self.sysConfigFilter))
        if name == None or name == '':
            return
        self.sysconfigfile = name
        self.ui.sysconfname.setText(name)
        self.LoadSysConf()
        costrange = self.sysconfig.costInterval()
        timerange = self.sysconfig.timeInterval()
        self.ui.maxcost.setText(str(costrange[1]))
        self.ui.mincost.setText(str(costrange[0]))
        self.ui.maxtime.setText(
            str(timerange[1]).replace("]", "").replace("[", ""))
        self.ui.mintime.setText(
            str(timerange[0]).replace("]", "").replace("[", ""))
        self.ui.limitcost.setText(
            str(self.sysconfig.limitcost
                ) if self.sysconfig.limitcost != None else "")

    def OpenAlgConf(self):
        name = unicode(
            QFileDialog.getOpenFileName(filter=self.algConfigFilter))
        if name == None or name == '':
            return
        self.algconfigfile = name
        self.ui.algconfname.setText(name)
        self.LoadAlgConf()

    def Random(self):
        d = ConfigDialog()
        d.exec_()
        if d.result() == QDialog.Accepted:
            dict = d.GetResult()
        else:
            return
        self.sysconfig = SysConfig()
        self.sysconfig.generateRandom(dict)
        costrange = self.sysconfig.costInterval()
        timerange = self.sysconfig.timeInterval()
        self.ui.maxcost.setText(str(costrange[1]))
        self.ui.mincost.setText(str(costrange[0]))
        self.ui.maxtime.setText(
            str(timerange[1]).replace("]", "").replace("[", ""))
        self.ui.mintime.setText(
            str(timerange[0]).replace("]", "").replace("[", ""))
        self.ui.limitcost.setText("")
        self.ui.limittimes.setText("")
        self.ui.sysconfname.setText("")
        self.constraints = []

    def InputTimeLimits(self):
        if self.ui.limittimes.text() == "":
            return
        for constr in self.constraints:
            if isinstance(constr, TimeConstraints):
                self.constraints.remove(constr)
                break
        l = []
        for c in self.ui.limittimes.text().split(","):
            l.append(int(c))
        self.constraints.append(TimeConstraints(l))
        for m, t in zip(self.sysconfig.modules, l):
            m.limittime = t

    def InputCostLimit(self):
        if self.ui.limitcost.text() == "":
            return
        for constr in self.constraints:
            if isinstance(constr, CostConstraints):
                self.constraints.remove(constr)
                break
        c = int(self.ui.limitcost.text())
        self.constraints.append(CostConstraints(c))
        self.sysconfig.limitcost = c

    def SaveSysConf(self):
        name = unicode(
            QFileDialog.getSaveFileName(filter=self.sysConfigFilter))
        if name == None or name == '':
            return
        self.sysconfig.saveXML(name)

    def no_checked(self):
        if self.ui.checktime_yes.isChecked():
            return
        for constr in self.constraints:
            if isinstance(constr, TimeConstraints):
                self.constraints.remove(constr)
                break
        self.ui.limittimes.setText("")
        self.ui.limittimes.setEnabled(False)

    def yes_checked(self):
        if not self.ui.checktime_yes.isChecked():
            return
        self.ui.limittimes.setEnabled(True)
        if self.sysconfig == None:
            return
        c = self.sysconfig.getLimitTimes()
        if c != None:
            self.constraints.append(TimeConstraints(c))
            self.ui.limittimes.setText(
                str(c).replace("]", "").replace("[", ""))