0
CPLEXとPythonの統合時に新規です。タイトルに書かれているCplex-Python統合のエラーがあります。私のコードは以下の通りです。エラーの原因は最後に設定された制約です。私は何かアドバイスを受けています。 ありがとうございます。 Mathematical formulation of the last constraint setCplexSolverError:CPLEXエラー1222:重複したエントリまたはエントリ
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 9 10:06:38 2017
@author: nazmisener
"""
from __future__ import print_function
import pandas as pd
import cplex
from cplex.exceptions import CplexSolverError
import numpy as np
import xlrd
noph=25
noz=[ 25 for i in range(noph) ]
#acquiring data from excel
dem = [ [ 1000 for i in range(noph) ] for j in range(noph) ]
fc = [ [ 0.5 for i in range(noph) ] for j in range(noph) ]
c=[ [ 0 for i in range(noph) ] for j in range(noph) ]
for i in range(noph):
for k in range(noph):
c[i][k]=fc[i][k]/25000
hoc=[ 10000 for i in range(noph) ]
#determining link with maximum length
maxar=max(fc)
maxlin=max(maxar)
#coverage percentage
perc=0.7
meas=perc*maxlin
A=[ [ 0 for i in range(noph) ] for j in range(noph) ]
objt=[ [ 0 for i in range(noph) ] for j in range(noph) ]
#calculating matrix A
for d1 in range(noph):
for d2 in range(noph):
if meas<fc[d1][d2] or d1==d2:
A[d1][d2]=0
else:
A[d1][d2]=1
O=[ 0 for i in range(noph) ]
D=[ 0 for i in range(noph) ]
for i in range(noph):
for j in range(noph):
O[i]=+dem[i][j]
D[i]=+dem[j][i]
for i in range(noph):
for k in range(noph):
if i!=k:
objt[i][k] = c[i][k]*(O[i]+D[i])
else:
objt[i][k]=0
def dethub():
model=cplex.Cplex()
model.objective.set_sense(model.objective.sense.minimize)
#defining decision variables
x=["x{0}".format(i+1) for i in range(noph)]
model.variables.add(obj=hoc, lb=[0.0]*noph, ub=[1.0] *noph,
types=["B"] *noph , names=x)
z=[]
for i in range(noph):
z.append([])
for j in range(noph):
varName = "z." + str(i) + "." + str(j)
z[i].append(model.variables.get_num())
model.variables.add(obj=[objt[i][j]],
lb=[0.0], ub=[1.0],
names=[varName])
# colname_y = ["y{0}{1}{2}".format(i+1,j+1,z+1) for i in range(noph)
# for j in range(noph) for z in range(noph)]
# model.variables.add(obj=c)
y = []
for i in range(noph):
y.append([])
for k in range(noph):
y[i].append([])
for j in range(noph):
yvarName = "y." + str(i) + "." + str(k) + "." + str(j)
y[i][k].append(model.variables.get_num())
model.variables.add(obj=[c[i][k]],
lb=[0.0],
ub=[cplex.infinity],
names=[yvarName])
#defining constraints
#the coverage constraints
for i in range(noph):
for k in range(noph):
thevars=[]
thecoefs=[]
thevars.append(z[i][k])
thecoefs.append(1)
thevars.append(A[i][k]*z[k][k])
thecoefs.append(-1)
model.linear_constraints.add(
lin_expr=[cplex.SparsePair(thevars, thecoefs)],
senses=["L"],
rhs=[0.0])
#summation of flow constraints
for i in range(noph):
summation_constraint = cplex.SparsePair(ind=[z[i][k] for k in
range(noph)],
val=[1.0] * noph)
model.linear_constraints.add(lin_expr=[summation_constraint],
senses=["E"],
rhs=[1])
#flow ensure constraints
for i in range(noph):
for k in range(noph):
thevarws=[z[i][k]]
thecoefws=[-O[i]]
for l in [q for q in xrange(noph) if q!=k]:
thevarws.append(y[i][k][l])
thecoefws.append(1)
model.linear_constraints.add(
lin_expr=[cplex.SparsePair(thevarws, thecoefws)],
senses=["L"],
rhs=[0.0])
#x equality constraints
for k in range(noph):
thevarys=[]
thecoefys=[]
thevarys.append(z[k][k])
thecoefys.append(1)
thevarys.append(x[k])
thecoefys.append(-1)
model.linear_constraints.add(
lin_expr=[cplex.SparsePair(thevarys, thecoefys)],
senses=["E"],
rhs=[0.0])
#flow conservation constraints
for i in range(noph):
for k in range(noph):
thevarxs=[z[i][k]]
thecoefxs=[O[i]]
for l in [q for q in xrange(noph) if q!=k]:
thevarxs.append(y[i][k][l])
thecoefxs.append(-1)
thevarxs.append(y[i][l][k])
thecoefxs.append(1)
for j in range(noph):
thevarxs.append(z[j][k])
thecoefxs.append(-dem[k][j])
model.linear_constraints.add(
lin_expr=[cplex.SparsePair(thevarxs, thecoefxs)],
senses=["E"],
rhs=[0.0])
try:
model.solve()
except CplexSolverError as e:
print("Exception raised during solve: " + e)
else:
solution = model.solution
# solution.get_status() returns an integer code
print("Solution status = ", solution.get_status(), ":", end=' ')
# the following line prints the corresponding string
print(solution.status[solution.get_status()])
# Display solution.
print("Total cost = ", solution.get_objective_value())
if __name__ == "__main__":
dethub()
この質問は、[crossposted](https://www.ibm.com/developerworks/community/forums/html/topic?id=1f29c497-d455-42c6-a9a7-627c19d21f63)です。将来はそれを避けてください。 – rkersh