-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexercise1.py
67 lines (50 loc) · 1.88 KB
/
exercise1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
Laboratorio 4 - MOS
Ejercicio 1
Realizado por:
Juan Andrés Romero C - 202013449
Juan Sebastián Alegría - 202011282
"""
from pyomo.environ import *
from pyomo.opt import SolverFactory
model = ConcreteModel()
# Sets and parameters
model.i = {'i1', 'i2', 'i3'} # Origin CPUs
model.j = {'j1', 'j2'} # Destination CPUs
model.p = {'pk', 'pu'} # Process types
# Amount of processes supplied by origin
model.oProcess = Param(model.i, model.p, mutable=True)
# Amount of processes demanded by destination
model.dProcess = Param(model.j, model.p, mutable=True)
# Cost of sending processes from origin to destination
model.cost = Param(model.i, model.j, mutable=True)
model.oProcess['i1', 'pk'] = 60
model.oProcess['i1', 'pu'] = 80
model.oProcess['i2', 'pk'] = 80
model.oProcess['i2', 'pu'] = 50
model.oProcess['i3', 'pk'] = 50
model.oProcess['i3', 'pu'] = 50
model.dProcess['j1', 'pk'] = 100
model.dProcess['j1', 'pu'] = 60
model.dProcess['j2', 'pk'] = 90
model.dProcess['j2', 'pu'] = 120
model.cost['i1', 'j1'] = 300
model.cost['i1', 'j2'] = 500
model.cost['i2', 'j1'] = 200
model.cost['i2', 'j2'] = 300
model.cost['i3', 'j1'] = 600
model.cost['i3', 'j2'] = 300
# Amount of processes sent per path and type
model.x = Var(model.i, model.j, model.p, domain=NonNegativeReals)
# Objective function
model.targetFunc = Objective(expr=sum(model.cost[i, j] * model.x[i, j, p] for i in model.i for j in model.j for p in model.p), sense=minimize)
# Constraints
def max_processes_sent(model, i, p):
return sum(model.x[i, j, p] for j in model.j) <= model.oProcess[i, p]
def satisfied_CPU_demand(model, j, p):
return sum(model.x[i, j, p] for i in model.i) == model.dProcess[j, p]
model.maxProcessesSent = Constraint(model.i, model.p, rule=max_processes_sent)
model.satisfiedCPUDemand = Constraint(model.j, model.p, rule=satisfied_CPU_demand)
# Applying the solver
SolverFactory('glpk').solve(model)
model.display()