Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions stl/stl2milp.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,22 @@ 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()
if t not in self.variables[formula]:
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):
Expand All @@ -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]

Expand Down Expand Up @@ -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))
self.model.addConstr(z <= sum(z_aux))