Source code for energia.library.examples.supply_chain

from itertools import product

from energia import Currency, Location, Model, Process, Resource, Transport


[docs] def seattle_topeka(): """The Famous Seattle to Topeka Supply Chain Example""" m = Model() m.declare(Location, ['seattle', 'sandiego', 'newyork', 'chicago', 'topeka']) m.usd = Currency() m.r_consume = Resource() _ = m.r_consume.consume(m.seattle) <= 350 _ = m.r_consume.consume(m.sandiego) <= 600 m.r_release = Resource() _ = m.r_release.release(m.newyork) >= 325 _ = m.r_release.release(m.chicago) >= 300 _ = m.r_release.release(m.topeka) >= 275 m.r = Resource() m.purchase = Process() _ = m.purchase(m.r) == -m.r_consume _ = m.purchase.operate == True m.dispatch = Process() _ = m.dispatch(-m.r) == m.r_release _ = m.dispatch.operate == True m.purchase.locate(m.seattle, m.sandiego) m.dispatch.locate(m.newyork, m.chicago, m.topeka) dist_dict = { m.seattle: {m.newyork: 2.5, m.chicago: 1.7, m.topeka: 1.8}, m.sandiego: {m.newyork: 2.5, m.chicago: 1.8, m.topeka: 1.4}, } for i, j in product([m.seattle, m.sandiego], [m.newyork, m.chicago, m.topeka]): m.Link(i, j, dist=dist_dict[i][j]) m.channel = Transport() _ = m.channel(m.r) == 1.0 # 100% efficient for i in dist_dict: for j in dist_dict[i]: _ = m.usd.spend(m.channel.operate, i - j) == 90 m.channel.locate(i - j) return m