CPLEX-python3.6不断显示“非列表”错误

我正在将CPLEX求解器与python 3.6一起使用来求解数学编程模型。我曾经在旧计算机上执行此操作,现在在新计算机上重新安装了cplex却没有问题,但是当我尝试运行最初运行时没有错误的模型时,现在总是会遇到相同的错误,例如Traveling Salesman问题:


TypeError                                 Traceback (most recent call last)
~\DropBox\CPLEX\TSP_MTZ\TSP.py in <module>
    137
    138
--> 139 TSP(4)

~\DropBox\CPLEX\TSP_MTZ\TSP.py in TSP(N)
     38                 for j in range(N):
     39                         x_varobj.append(float(c[i,j]))
---> 40         Model.variables.add(obj = x_varobj,lb = x_varlb,ub = x_varub,types = x_vartypes,names = x_varnames)
     41
     42         u_vars=list(np.array(["u("+str(i)+")" for i in range(0,N)]))

c:\users\healh\.conda\envs\py36\lib\site-packages\cplex\_internal\_subinterfaces.py in add(self,obj,lb,ub,types,names,columns)
    454                                                      columns)
    455         return self._add_iter(self.get_num,self._add,--> 456                               obj,columns)
    457
    458     def delete(self,*args):

c:\users\healh\.conda\envs\py36\lib\site-packages\cplex\_internal\_baseinterface.py in _add_iter(getnumfun,addfun,*args,**kwargs)
     39         """non-public"""
     40         old = getnumfun()
---> 41         addfun(*args,**kwargs)
     42         return range(old,getnumfun())
     43

c:\users\healh\.conda\envs\py36\lib\site-packages\cplex\_internal\_subinterfaces.py in _add(self,columns)
    376         if columns == []:
    377             CPX_PROC.newcols(self._env._e,self._cplex._lp,--> 378                              types,names)
    379         else:
    380             with CPX_PROC.chbmatrix(columns,self._cplex._env_lp_ptr,c:\users\healh\.conda\envs\py36\lib\site-packages\cplex\_internal\_procedural.py in newcols(env,lp,xctype,colname)
    965         status = CR.CPXXnewcols(
    966             env,ccnt,c_obj,c_lb,c_ub,--> 967             xctype,colname)
    968     check_status(env,status)
    969

c:\users\healh\.conda\envs\py36\lib\site-packages\cplex\_internal\_pycplex.py in CPXXnewcols(env,py_obj,py_lb,py_ub,colname)
   1783
   1784 def CPXXnewcols(env: 'CPXCENVptr',lp: 'CPXLPptr',ccnt: 'CPXDIM',py_obj: 'double const *',py_lb: 'double const *',py_ub: 'double const *',xctype: 'char const *',colname: 'char const *const *') -> "int":
-> 1785     return _pycplex_platform.CPXXnewcols(env,colname)
   1786
   1787 def CPXXaddcols(env: 'CPXCENVptr',nzcnt: 'CPXNNZ',py_matbeg: 'CPXNNZ const *',colname: 'char const *const *') -> "int":

TypeError: not a list

我的代码如下:

import time
import numpy as np
import cplex
from cplex import Cplex
from cplex.exceptions import CplexError
import sys
import networkx as nx
import matplotlib.pyplot as plt
from openpyxl import Workbook
import xlrd

def TSP(N):
    wb = Workbook()
    ws = wb.active
    book = xlrd.open_workbook('C.xlsx')            #LECTURA DE PARÁMETROS.
    sheet = book.sheet_by_name("C")
    c=[[int(sheet.cell_value(r,c)) for c in range(sheet.ncols)] for r in range(sheet.nrows)]
    c=np.matrix(c)  
    print("")
    print("MATRIZ DE disTANCIAS")
    print("")        
    print(c)    
    print("")
    print("")
    print("") 

    Model=cplex.Cplex()

    x_vars=np.array([["x("+str(i)+","+str(j)+")" for j in range(N)] for i in range(N)])
    x_varnames = x_vars.flatten()
    x_vartypes='B'*N*N
    x_varlb = [0.0]*len(x_varnames)
    x_varub = [1.0]*len(x_varnames)
    x_varobj = []
    for i in range(N):
        for j in range(N):
            x_varobj.append(float(c[i,j]))
    Model.variables.add(obj = x_varobj,names = x_varnames)

    u_vars=np.array(["u("+str(i)+")" for i in range(0,N)])
    u_varnames=u_vars.flatten()
    u_vartypes='I'*N
    u_varlb=[1.0]*N
    u_varub=[float(N)-1.0]*N
    u_varobj=[0.0]*N

    Model.variables.add(obj = u_varobj,lb = u_varlb,ub = u_varub,types = u_vartypes,names = u_varnames)
    Model.objective.set_sense(Model.objective.sense.minimize)
    # suma(J,x[i,j])==1.0,forall i in N
    for i in range(N):
        row1=[]
        val1=[]
        for j in range(N):
            row1.append(x_vars[i,j])
            val1.append(1.0)

        Model.linear_constraints.add(lin_expr = [cplex.SparsePair(ind = row1,val= val1)],senses = 'E',rhs = [1.0])

    # suma(i,forall j in N
    for j in range(N):
        row2=[]
        val2=[]
        for i in range(N):
            row2.append(x_vars[i,j])
            val2.append(1.0)

        Model.linear_constraints.add(lin_expr = [cplex.SparsePair(ind = row2,val= val2)],rhs = [1.0])
    
    #u[i]-u[j]-(N-1)x[i,ji]<=N-2,forall i in N,forall j in N,con i!=j.
    for i in range(1,N):
        for j in range(1,N):
            if i!=j:
                row3=[]
                val3=[]
                row3.append(u_vars[i])
                val3.append(1.0)
                row3.append(u_vars[j])
                val3.append(-1.0)
                row3.append(x_vars[i,j])
                val3.append(float(N)-1.0)
                Model.linear_constraints.add(lin_expr = [cplex.SparsePair(ind = row3,val= val3)],senses = 'L',rhs = [float(N)-2.0])

    
    solution=Model.solve()
    Model.write('modelo.lp')
    #Model.parameters.mip.pool.relgap.set(0.6)
    
    pool_solution=Model.populate_solution_pool()
    #print(pool_solution)

    def show_solution():
        print("\nVARLOS FUNCION OBJETIVO - disTANCIA MINIMIA = {}".format(Model.solution.get_objective_value()))
        V=[i for i in range(N)]
        E=[]
        E1=[(i,j) for i in range(N) for j in range(N) if i!=j]
        for i in range(0,N):
            for j in range(0,N):
                if(Model.solution.get_values("x("+str(i)+","+str(j)+")")!=0.0):
                    print("x("+str(i)+","+str(j)+")"+" = "+str(Model.solution.get_values("x("+str(i)+","+str(j)+")")))
                    E.append((i,j))
        print("")

        for i in range(0,N):
            if(Model.solution.get_values("u("+str(i)+")")!=0.0):
                print("u("+str(i)+")"+" = "+str(Model.solution.get_values("u("+str(i)+")")))
        print("")

        G=nx.DiGraph()
        G.add_edges_from(E)
        G.add_nodes_from(V)

        
        pos=nx.spring_layout(G,k=0.3)

        print(Model.solution.get_values("x("+str(1)+","+str(0)+")")) #OBTENER VALOR DE UNA VARIABLE.
        print("ESTATUS_DE_LA_SOLUCION_ENCONTradA:",Model.solution.get_status_string())
        print("SOLUCION_PRIMAL_OPTIMA?:",Model.solution.is_primal_feasible())
        #print(Model.variables.get_cols())
        
        nx.draw_networkx_nodes(G,pos)
        nx.draw_networkx_labels(G,pos)
        nx.draw_networkx_edges(G,pos,edgelist=E1,edge_color='blue',width=0.3,arrows=True) # highlight elist
        nx.draw_networkx_edges(G,edge_color='black',width=1.8,arrows=True) # show all edges,thin lines
        

# turn off axis markings
        plt.axis('off')
        plt.savefig('grafo_tsp.png',dpi=20)
        plt.show()
    
    show_solution()

TSP(4)

这是数据:

DATA

我真的不明白这个问题,我每天都这样做,现在有这个问题,有什么提示吗?

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...