1 | initial version |
this my code, it is too long, so, I hope that you can understand it :
scheduling=MixedIntegerLinearProgram(maximization=false )
from sage.numerical.mip import Sum
f = scheduling.new_variable (dim=4, binary=true)
l = scheduling.new_variable (dim=4, binary=true) #L id 0 if link op not selected for demand k in time t
A = scheduling.new_variable(dim=6,binary=true) # A is binary s to d in link op in time t for demand k z_op=scheduling.new_variable(dim=2,binary=true) #Z is 1 if is link op is on y = scheduling.new_variable(dim=1,binary=true)
Num_demand_slice= 1 #number of the time slice
power_link_op= matrix ([[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1]]) # power of the link op that is considered as cost
demand_traffic_kt = matrix ([1]); # 0/1 matrix if demand has traffic in t is 1
rate_k= [2]; #rate of the trafic of the demand k
link_capacity_op= matrix ([[0,0,30,30,30],[0,0,30,30,30],[30,30,0,0,0],[30,30,0,0,0],[30,30,0,0,0]]) # zero if not exist this link in graph, others capacity of that 5 or 6 (not binary matrix) power_sw_o= [[0,0,2,2,2]] #power of the sw o if is zero means that it is server V=5 K=1 B=Num_demand_slice * K
for o in range (0,V): for p in range (0,V): if (link_capacity_op[o][p]==0): for t in range (0,Num_demand_slice): for k in range (0,K): scheduling.add_constraint(l[o][p][k][t]==0)
for t in range (0,Num_demand_slice ): for k in range (0,K): if demand_traffic_kt[k][t]==0 : for s in range (0,V ): for d in range (0,V ): scheduling.add_constraint(f[s][d][k][t]==0)
for t in range (0,Num_demand_slice ): for k in range (0,K): if demand_traffic_kt[k][t]==0 : for o in range (0,V ): for p in range (0,V ): scheduling.add_constraint(l[o][p][k][t]==0)
for t in range(0,Num_demand_slice): for d in range(0,V ): for k in range(0,K ): for o in range(0,V ): for p in range(0,V ): for s in range(0,Num_demand_slice ): scheduling.add_constraint(f[s][d][k][t] + l[o][p][k][t]- 1 <= A[s][d][k][o][p][t])
for t in range(0,Num_demand_slice ): for d in range(0,V ): for k in range(0,K ): for o in range(0,V ): for p in range(0,V ): for s in range(1,Num_demand_slice+1 ): scheduling.add_constraint(f[s][d][k][t] + l[o][p][k][t] >= 2* A[s][d][k][o][p][t])
for t in range(0,Num_demand_slice ): for k in range(0,K): for s in range (0,V ): for d in range (0,V ): for o in range (0,V ): if s==o : scheduling.add_constraint(rate_k[k]demand_traffic_kt[k][t](Sum(A[s][d][k][o][p][t] for p in range(0,V))\ - Sum(A[s][d][k][p][o][t] for p in range (0,V))) == rate_k[k] * demand_traffic_kt[k][t])
for t in range(0,Num_demand_slice ): for k in range(0,K): for s in range (0,V ): for d in range (0,V ): for o in range (0,V ): if d==o : scheduling.add_constraint(rate_k[k]* demand_traffic_kt[k][t](Sum(A[s][d][k][o][p][t] for p in range(0,V))\ - Sum(A[s][d][k][p][o][t] for p in range (0,V))) == - rate_k[k]demand_traffic_kt[k][t])
for t in range(0,Num_demand_slice ): for k in range(0,K): for s in range (0,V ): for d in range (0,V ): for o in range (0,V ): if (s!=o and d!=o): scheduling.add_constraint(rate_k[k]* demand_traffic_kt[k][t]*(Sum(A[s][d][k][o][p][t] for p in range(0,V))\ - Sum(A[s][d][k][p][o][t] for p in range (0,V))) == 0)
# for o in range(0,V): # for k in range (0,K): # scheduling.add_constraint( 2Sum(rate_k[k] demand_traffic_kt[k][t] * l[o][p][k][t] for p in range (0,V)) \ # - Sum(Sum(rate_k[k] * demand_traffic_kt[k][t]* A[o][d][k][o][p][t] for p in range (0,V)) for d in range (0,V))\ # - Sum(Sum(rate_k[k] * demand_traffic_kt[k][t] * A[d][o][k][o][p][t]for p in range (0,V))for d in range (0,V))\ # - 2* Sum(rate_k[k]* demand_traffic_kt[k][t] * l[p][o][k][t] for p in range(0,V))\ # + Sum(Sum(rate_k[k]* demand_traffic_kt[k][t]* A[s][o][k][p][o][t] for p in range (0,V)) for s in range (0,V)) \ # + Sum (Sum (rate_k[k]* demand_traffic_kt[k][t] * A[o][d][k][p][o][t] for p in range(0,V)) for d in range (0,V)) ==\ # - rate_k[k] * demand_traffic_kt[k][t] * Sum(f[s][o][k][t] for s in range (0,V)) \ # - rate_k[k] * demand_traffic_kt[k][t] * Sum(f[o][d][k][t] for d in range (0,V))) #
for t in range(0,Num_demand_slice): for k in range (0,K): scheduling.add_constraint (Sum(f[s][s][k][t] for s in range(0,V))== 0)
for t in range(0,Num_demand_slice): for k in range (0,K): scheduling.add_constraint(Sum (Sum(f[s][d][k][t] for s in range (0,V)) for d in range(0,V)) == demand_traffic_kt[k][t])
for t in range(0,Num_demand_slice):
for o in range (0,V):
for p in range (0,V):
scheduling.add_constraint(Sum( (rate_k[k] * l[o][p][k][t]) for k in range (0,K)) <= link_capacity_op[o][p])
for t in range(0,Num_demand_slice):
for k in range (0,K):
for o in range (0,V):
for p in range (0,V):
scheduling.add_constraint(z_op[o][p] >= l[o][p][k][t])
for t in range(0,Num_demand_slice):
for k in range (0,K):
for o in range (0,V):
for p in range (0,V):
for i in range (0,B):
scheduling.add_constraint(z_op[o][p]- l[o][p][k][t]<= +Infinity * y[i])
for t in range(0,Num_demand_slice):
for k in range (0,K):
for o in range (0,V):
for p in range (0,V):
for i in range (0,B):
scheduling.add_constraint(z_op[o][p]- l[o][p][k][t]>= -Infinity * y[i])
for t in range(0,Num_demand_slice):
scheduling.add_constraint(Sum(Sum(Sum( f[s][d][k][t] for s in range (0,V)) for d in range (0,V)) for k in range (0,K))\
== sum(demand_traffic_kt[k][t] for k in range(0,K)))
scheduling.add_constraint(Sum(y[i] for i in range (0,B)) <= B-1)
scheduling.set_objective(sum(sum(z_op[o][p] * ( power_sw_o[o] + power_link_op[o][p]) for o in range(0,V)) for p in range(0,V)))
scheduling.solve()
2 | No.2 Revision |
this my code, it is too long, so, I hope that you can understand it :
scheduling=MixedIntegerLinearProgram(maximization=false scheduling.solve()