How to convert parameters bigger than a certain number into 1 and smaller than a certain number into 0.
For exmaple, I set parameters
model.distance = Param(model.dc,model.location,domain=NonNegativeReals)
param distance :=
DC1 Shelter1 0.61
DC1 Shelter2 3.32
DC1 Shelter3 9.5
DC1 Shelter4 6.52
DC2 Shelter1 6.04
DC2 Shelter2 0.51
DC2 Shelter3 1.34
DC2 Shelter4 6.06
;
How could I obtain a new parameters say model.a that is (threshold = 2):
DC1 Shelter1 0
DC1 Shelter2 1
DC1 Shelter3 1
DC1 Shelter4 1
DC2 Shelter1 1
DC2 Shelter2 0
DC2 Shelter3 0
DC2 Shelter4 1
I know it's an easy question, but I'm new to pyomo & python. Thanks
from pyomo.environ import *
model = AbstractModel("Warehouse Location")
model.location = Set()
model.dc = Set()
model.distance = Param(model.dc,model.location,domain=NonNegativeReals)
model.demands = Param(model.location)
model.x = Var(model.dc, model.location, domain=NonNegativeReals)
model.y = Var(model.dc, within=Binary)
def obj_expression(model):
transportation_cost = sum(sum(2*model.y[i]*model.distance[i,j]*model.x[i,j] \
for j in model.location) for i in model.dc)
fixed_cost = 300000*summation(model.y)
return transportation_cost + fixed_cost
model.OBJ = Objective(rule=obj_expression)
def supply_constraints_rule(model,dc):
return sum(model.x[dc,l] for l in model.location) <= 150000
model.supply_Constraint = Constraint(model.dc, rule=supply_constraints_rule)
def supply_constraints_rule(model,dc):
return sum(model.x[dc,l] for l in model.location) <= 150000
model.supply_Constraint = Constraint(model.dc, rule=supply_constraints_rule)
def demand_constraints_rule(model, l):
return sum(model.y[dc]*model.x[dc,l] for dc in model.dc) >= model.demands[l]
model.demand_Constraint = Constraint(model.location, rule=demand_constraints_rule)
def LOS_Constraints_rule():
model.a = model.distance >= 2
return summation(model.a, model.x)/summation(model.x) >= 0.6
model.LOS_Constraint = Constraint(model, rule=LOS_Constraints_rule)
opt = SolverFactory('gurobi', solver_io='python')
instance = model.create_instance("Continuous Location.dat")
results = opt.solve(instance)
instance.display()
set dc := DC1 DC2 DC3 DC4 DC5;
set location := Shelter1 Shelter2 Shelter3 Shelter4 Shelter5 Shelter6 Shelter7 Shelter8;
param distance :=
DC1 Shelter1 0.61
DC1 Shelter2 3.32
DC1 Shelter3 9.5
DC1 Shelter4 6.52
DC1 Shelter5 7.77
DC1 Shelter6 1.92
DC1 Shelter7 8.52
DC1 Shelter8 9.75
DC2 Shelter1 6.04
DC2 Shelter2 0.51
DC2 Shelter3 1.34
DC2 Shelter4 6.06
DC2 Shelter5 0.22
DC2 Shelter6 6.33
DC2 Shelter7 4.61
DC2 Shelter8 3.28
DC3 Shelter1 4.99
DC3 Shelter2 2.41
DC3 Shelter3 2.33
DC3 Shelter4 3.95
DC3 Shelter5 8.84
DC3 Shelter6 7.94
DC3 Shelter7 7.87
DC3 Shelter8 0.94
DC4 Shelter1 5.58
DC4 Shelter2 8.8
DC4 Shelter3 6.32
DC4 Shelter4 8.54
DC4 Shelter5 5.15
DC4 Shelter6 6.06
DC4 Shelter7 9.42
DC4 Shelter8 2.16
DC5 Shelter1 7.87
DC5 Shelter2 9.64
DC5 Shelter3 0.7
DC5 Shelter4 5.92
DC5 Shelter5 2.7
DC5 Shelter6 0.26
DC5 Shelter7 0.5
DC5 Shelter8 3.4;
param demands :=
Shelter1 14000
Shelter2 8000
Shelter3 25000
Shelter4 22000
Shelter5 20000
Shelter6 17000
Shelter7 18500
Shelter8 23000
;