我试图用Gurobi
求解器解决调度问题。
我想将Gurobi
解决方案写入控制台。我收到错误说
"参数1:无法转换为' int' to 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();
}
}
答案 0 :(得分: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 :(得分: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)));
答案 2 :(得分:0)
List
List
List
int
Add
。您尝试将int
i
元素List
添加到List
List
。由于您的变量是List
int
i
List
的{{1}},因此List
&#39;元素是int
Add
{1}}的{1}}。当您尝试List
某些内容时,要添加的参数应为int
int
。由于您传递了int
,因此您会收到问题中提到的错误。您需要将i
添加到List
List
List
int
X_ijk_list[i][X_ijk_list[i].Count() - 1].Add(Convert.ToInt32(X_ijk[i, j, k].Get(GRB.DoubleAttr.X)));
<script>
元素的最后一个元素中}}:
<link>