2017-06-07 118 views
0

我正在学习如何使用Python解决Gurobi中的组合优化问题。我想知道什么是读取csv文件以将数据用作模型参数的最佳选择。我使用'genfromtxt'来读取csv文件,但是我在使用它来进行约束建造时遇到困难(Gurobi不支持这种类型 - 请参阅错误)。Python中的Gurobi:读取csv文件的最佳方式

这里我的代码和错误消息my_data由4列组成:节点索引,x坐标,y坐标和最大度数。

from gurobipy import * 
from numpy import genfromtxt 
import math 

# Read data from csv file 
my_data = genfromtxt('prob25.csv', delimiter=',') 

# Number of vertices 
n = len(my_data) 

# Function to calculate euclidean distancces 
dist = {(i,j) : 
    math.sqrt(sum((my_data[i][k]-my_data[j][k])**2 for k in [1,2])) 
    for i in range(n) for j in range(i)} 

# Create a new model 
m = Model("dcstNarula") 

# Create variables 

vars = m.addVars(dist.keys(), obj=dist, vtype=GRB.BINARY, name='e') 
for i,j in vars.keys(): 
    vars[j,i] = vars[i,j] # edge in opposite direction 

m.update() 

# Add degree-b constraint 
m.addConstrs((vars.sum('*',j) <= my_data[:,3] 
      for i in range(n)), name='degree') 

GurobiError: Unsupported type (<type 'numpy.ndarray'>) for LinExpr addition argument 

数据

1,19.007,35.75,1 
2,4.4447,6.0735,2 
+0

显示'''my_data'''的前两行。 – sascha

+0

1,19.007,35.75,1 2,4.4447,6.0735,2 –

+0

将这两行代码模式添加到您的问题中。在评论中使用破碎格式不太有用。 **编辑:**所以没有头我想? – sascha

回答

1

的前两行实际上它是索引的一个问题,而不是数据类型。在代码:

# Add degree-b constraint 
m.addConstrs((vars.sum('*',j) <= my_data[:,3] 
     for i in range(n)), name='degree') 

它应该被用来vars.sum('*',i)代替vars.sum('*',j)my_data[i,3]代替my_data[:,3]

0

即使这个问题的答案,谁正在寻找好的方法来读取csv文件未来的访客,必须提及大熊猫:

import pandas as pd 
df = pd.read_csv('prob25.csv', header=None, index_col=0, names=['x', 'y', 'idx']) 
df 
     x  y idx 
1 19.0070 35.7500 1 
2 4.4447 6.0735 2 
相关问题