Created
February 29, 2020 20:15
-
-
Save philzook58/bb4d0af244966800cfa3d3a181041e31 to your computer and use it in GitHub Desktop.
petri net combinators for cvxpy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
T = 10 # total number of time steps as a global parameter | |
class PetriCat(): | |
def compose(f,g): | |
def res(): | |
a, b , fcon = f() | |
b1, c, gcon = g() | |
return a, c, fcon + gcon + [b == b1] | |
def idd(): | |
def res() | |
x = cvx.Variable((T-1,1), integer = True) | |
return x, x, [x >= 0] | |
def par(f,g): | |
def res(): | |
a, b , fcon = f() | |
c, d , gcon = g() | |
return cvx.vstack([a,c]), cvx.vstack([b,d]), fcon + gcon | |
return res | |
def weighted_block(wi, wo, wint): | |
def res(): | |
(Na, Ni) = wi.shape # number inputs, actions | |
(Na1,No) = wo.shape | |
(Na2, Nint) = wint.shape | |
assert(Na == Na1) | |
assert(Na == Na2) | |
action = cvx.Variable((T-1, Na), integer=True) | |
internal = cvx.Variable((T, Nint), integer =True) | |
flowin = action @ wi | |
flowout = action @ wo | |
return flowin, flowout, [internal[1:,:] == internal[:-1,:] + action @ wint, action >= 0, internal >= 0] | |
return res | |
def run(f): | |
a, b, fcon = f() | |
prob = cvx.Problem(cvx.Minimize(1), fcon) | |
prob.solve() | |
return a, b | |
# We need some way of specifying the initial and final states of things, Just more parameters to constructor functions I think |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment