diff --git a/stl/stl2milp.py b/stl/stl2milp.py index 920704c..097bb4d 100644 --- a/stl/stl2milp.py +++ b/stl/stl2milp.py @@ -53,7 +53,7 @@ def to_milp(self, formula, t=0): self.__milp_call[formula.op](formula, z, t) return z - def add_formula_variable(self, formula, t, vtype=grb.GRB.BINARY): + def add_formula_variable(self, formula, t): '''Adds a variable for the `formula` at time `t`.''' if formula not in self.variables: self.variables[formula] = dict() @@ -61,10 +61,14 @@ def add_formula_variable(self, formula, t, vtype=grb.GRB.BINARY): opname = Operation.getString(formula.op) identifier = formula.identifier() name = '{}_{}_{}'.format(opname, identifier, t) - self.variables[formula][t] = self.model.addVar(vtype=vtype, - name=name) - self.model.update() #TODO: not sure if this is needed (NEEDED!) - return self.variables[formula][t], True + if formula.op == Operation.PRED: + variable = self.model.addVar(vtype=grb.GRB.BINARY, name=name) + else: + variable = self.model.addVar(vtype=grb.GRB.CONTINUOUS, + name=name, lb=0, ub=1) + self.variables[formula][t] = variable + self.model.update() + return variable, True return self.variables[formula][t], False def add_state(self, state, t): @@ -77,7 +81,6 @@ def add_state(self, state, t): name='{}_{}'.format(state, t) v = self.model.addVar(vtype=vtype, lb=low, ub=high, name=name) self.variables[state][t] = v - print 'Added state:', state, 'time:', t self.model.update() return self.variables[state][t] @@ -173,4 +176,4 @@ def until(self, formula, z, t): + sum(z_children_left[:t+a+k+1])) self.model.addConstr(z >= z_conj) - self.model.addConstr(z <= sum(z_aux)) \ No newline at end of file + self.model.addConstr(z <= sum(z_aux))