2017-03-01 41 views
3

我试图解决与Gurobi求解器的调度问题。 我想将我的Gurobi解决方案写入控制台。我得到一个错误说Gurobi,C#:无法从'int'转换为System.Collections.Generic.List <int>

“参数1:无法从‘诠释’转换到System.Collections.Generic.List”

为其成功写入另外两个变量工作这确切的代码?控制台

如果这里是错误

using System; 
using System.Collections.Generic; 
using System.Linq; 
using Gurobi; 

List<List<List<int>>> X_ijk_list = new List<List<List<int>>>(); 

Console.WriteLine("X_ijk"); 

for (int k = 0; k < n_machines; ++k) 
{ 
    Console.WriteLine("Maschine" + k); 
    X_ijk_list.Add(new List<List<int>>()); 

    for (int i = 0; i < n_jobs; ++i) 
    { 
     X_ijk_list[i].Add(new List<int>()); 

     for (int j = 0; j < n_tasks_job[i]; ++j) 
     { 
      X_ijk_list[i].Add(Convert.ToInt32(X_ijk[i, j, k].Get(GRB.DoubleAttr.X))); //error here 
      Console.Write(X_ijk_list[i][j][k]); 
      Console.Write(";"); 
     } 

     Console.WriteLine(); 
    } 
} 

回答

3

你有2只嵌套列出了此行:

X_ijk_list[i].Add(Convert.ToInt32(X_ijk[i, j, k].Get(GRB.DoubleAttr.X))); // 

您正试图向第一个嵌套列表中添加一个数字。但如果你看看你的声明:

List<List<List<int>>> X_ijk_list = new List<List<List<int>>>(); 

你将需要一个List<int>!像你这样已经在这一行:

X_ijk_list[i].Add(new List<int>()); 

你的解决办法是从第二循环使用索引j并将其插入到第二个嵌套列表:

X_ijk_list[i][j].Add(Convert.ToInt32(X_ijk[i, j, k].Get(GRB.DoubleAttr.X))); // 

正如你在进入更深的循环你需要去深入嵌套列表:

X_ijk_list.Add(new List<List<int>>()); 
X_ijk_list[i].Add(new List<int>()); 
X_ijk_list[i][j].Add(3); 
+1

虽然我肯定会有的downvote没有评论,我还是会问为什么? –

1

在你的情况下X_ijk_list[i]List<List<int>>如何能够从第一行指出:

List<List<List<int>>> X_ijk_list 

我想有错字的错误,你可以用修改此行获得所需的行为:

X_ijk_list[i][j].Add(Convert.ToInt32(X_ijk[i, j, k].Get(GRB.DoubleAttr.X))); 
0

您拥有的intListList一个List。您尝试Addint元素到i'th List。由于您的变量是的intListList一个Listi“个元素的intList一个List。当您尝试使用Add时,要添加的参数预计为Listint。由于您代之以传递int,因此您会收到问题中提到的错误。您需要将int添加到i的最后一个元素“日你的ListintListList的元素:

X_ijk_list[i][X_ijk_list[i].Count() - 1].Add(Convert.ToInt32(X_ijk[i, j, k].Get(GRB.DoubleAttr.X))); 
相关问题