Esempio n. 1
0
 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))
Esempio n. 2
0
def Console(argv):
    print "Warning: Do not use command-line interface!"
    _algconf = argv[1]
    _sysconf = argv[2]
    _num = argv[3]
    _metamodel = argv[4]
    _percent = argv[5]

    f = open(_algconf, "r")
    dom = xml.dom.minidom.parse(f)
    root = dom.childNodes[0]
    Algorithm.algconf = GAConfig()
    Algorithm.algconf.LoadFromXmlNode(root)
    f.close()

    Module.conf = SysConfig()
    Module.conf.loadXML(_sysconf)
    System.constraints = []
    if Module.conf.limitcost != None:
        System.constraints.append(CostConstraints(Module.conf.limitcost))
    c = Module.conf.getLimitTimes()
    if c != None:
        System.constraints.append(TimeConstraints(c))

    result = _sysconf.replace(".xml", "")

    result += "_" + _metamodel
    Algorithm.algconf.use_metamodel = True
    if _metamodel == "none":
        Algorithm.algconf.use_metamodel = False
    elif _metamodel == "kn":
        Algorithm.algconf.metamodel = KNearestNeighbours(10)
    elif _metamodel == "lr":
        Algorithm.algconf.metamodel = Polynomial(Module.conf)
    elif _metamodel == "rnd":
        Algorithm.algconf.metamodel = Random()
    elif _metamodel == "avg":
        Algorithm.algconf.metamodel = Averaging()

    Algorithm.algconf.pop_control_percent = float(_percent) / 100.0

    algorithm = HGA()
    Algorithm.result_filename = result + "_" + _percent + ".csv"

    for i in range(int(_num)):
        if algorithm.algconf.metamodel:
            algorithm.algconf.metamodel.Clear()
        algorithm.Run()
        algorithm.PrintStats()
    try:
        os.remove("sch" + str(os.getpid()) + ".xml")
        os.remove("res" + str(os.getpid()) + ".xml")
    except:
        pass
Esempio n. 3
0
 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))
Esempio n. 4
0
 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 = []
Esempio n. 5
0
 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 = []
Esempio n. 6
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
Esempio n. 7
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("[", ""))