import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
from __future__ import division
from pyomo.environ import *
n = 10 #number of clients
Q = 15 #vehicle capacity
N = [i for i in range(1, n+1)]
V = N + [0]
q = {i:np.random.randint(1,10) for i in N}
locx = np.random.rand(len(V))*200
locy = np.random.rand(len(V))*100
A = [(i,j) for i in V for j in V if i!=j]
c = {(i,j):np.hypot(locx[i]-locx[j],locy[i]-locy[j]) for i,j in A}
model = ConcreteModel()
model.x = Var(A, domain=Binary)
model.u = Var(N, domain=NonNegativeIntegers, bounds=(0,Q))
model.OBJ = Objective(expr = sum(c[i,j]*model.x[i,j] for i,j in A), sense=minimize)
def ax_constraint_rule(model, i):
return sum(model.x[i,j] for j in V if i!=j) == 1
def ax_constraint_rule2(model, j):
return sum(model.x[i,j] for i in V if i!=j) == 1
def ax_constraint_rule3(model, i):
return q[i]<=model.u[i]
model.AxbConstraint = Constraint(N, rule=ax_constraint_rule)
model.AxbConstraint2 = Constraint(N, rule=ax_constraint_rule2)
model.AxbConstraint3 = Constraint(N, rule=ax_constraint_rule3)
opt = SolverFactory('glpk')
opt.solve(model)