x {(i, j): model.addVar(vtype B , name x_[{},{}] .format(i, j)) for i in range(num_node)
for j in range(num_node)}
# basic constraint
for j in range(num_node):
model.addCons(quicksum(x[i, j] for i in range(num_node)) 1, name basic_cover_[{}] .format(j))
for i in range(num_node):
model.addCons(x[i, j] x[i, i], name basic_centre_[{},{}] .format(i, j))
# number of centres
model.addCons(quicksum(x[i, i] for i in range(num_node)) num_centre, name num_centre )
# objective: min, total distance
model.setObjective(quicksum(mat_distance[i][j] * x[i, j] for i in range(num_node) for j in range(num_node)),
sense maximize )
# time limit
model.setRealParam( limits/time , 1000)
# solve
model.optimize()
print()
# status
status model.getStatus()
print( model status {} .format(status), n )
if status ! optimal :
return {}
# optimal objective value
obj_value model.getObjVal()
print( optimal objective value {} .format(obj_value), n )
# optimal solution
x_ {(i, j): model.getVal(x[i, j]) for i in range(num_node) for j in range(num_node)}
# result process
dict_res {}
for i in range(num_node):
if x_[i, i] 0.9:
list_tmp []
for j in range(num_node):
if x_[i, j] 0.9:
list_tmp.append(j)
dict_res[i] list_tmp
print( centre code {} serves nodes: {} .format(i, list_tmp))
return dict_res
主程序
import random
from model import location