gpt4 book ai didi

c# - Microsoft Solver Foundation 中的决策矩阵

转载 作者:行者123 更新时间:2023-11-30 20:47:09 28 4
gpt4 key购买 nike

我正在尝试使用 Microsoft Solver Foundation 来优化具有二元决策变量矩阵的问题。这是我的决策矩阵的格式:

X[i,j] =
{
{ x11, x12, ..., x1n },
{ x21, x22, ..., x2n },
...
{ xm1, xm2, ..., xmn },
};

我还有一个参数向量,它依赖于 Xij 矩阵(向量的每个元素都是 Xij 的一列的总和:

Y[i] =
{
Sum(x11, x21, ..., xm1), Sum(x12, x22, ..., xm2), ..., Sum(x1n, x2n, ..., xmn)

我知道我应该使用索引决策对象,但我很难做到。谁能帮帮我。我知道有两种索引决策的方法:

Decision Xij = new Decision(Domain.Any, "x", Some Set, Some other set);

还有:

`Decision[,] = new Decsion [i, j];`

有什么区别?

最佳答案

我为 Xij 创建了二维数组,如下所示:

static Decision[,] XijMatrix()
{
Decision[,] d = new Decision[int rows, int cols];
for (int row = 0; row < rows; row++)
for (int col = 0; col < cols; col++)
d[row, col] = new Decision(Domain.Boolean, "X" + row + col);

return d;
}

Yj 的另一个数组:

static Decision[,] YjMatrix()
{
Decision[,] d = new Decision[1, int cols];
for (int col = 0; col < cols; col++)
d[0, col] = new Decision(Domain.Boolean, "Y" + col);
return d;
}

为了将这两个矩阵绑定(bind)在一起,我向 moedl 添加了一个约束:

for (int i = 0; i < Yj.GetLength(1); i++)
{
model.AddConstraint("C" + i, Yj[0, i] == matColSum(Xij, i));
}

并且 matColSum 用于添加列 (i) 的元素:

static Term matColSum(Decision[,] Xij, int i)
{
Term r = Xij[0, i];
for (int row = 1; row < Xij.GetLength(0); row++)
{
r += Xij[row, i];
}
return r;
}

现在这创建了一个 Xij 矩阵,它在每一列中只有一个真值 (1);这就像 matColSum 将 Xij 和 Yj 元素视为整数!我究竟做错了什么?我不明白。

关于c# - Microsoft Solver Foundation 中的决策矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077055/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com