【问题标题】:How to implement This MP problem in ECLIPSE CLP or Prolog?如何在 ECLIPSE CLP 或 Prolog 中实现这个 MP 问题?
【发布时间】:2019-04-22 00:53:30
【问题描述】:

我想将此汇总实现为目标和约束(1-6) 谁能帮助我如何实现它们?

OBJ:最小值 ∑(i=1..N)∑(j=1..N) Cij * ∑(k=1..K)Xijk

约束: ∑(k=1..K) Yik=1(对于 N 中的所有 i)

【问题讨论】:

    标签: prolog eclipse-clp


    【解决方案1】:

    以下答案特定于 ECLiPSe(它使用循环、数组和数组切片表示法,它们不是标准 Prolog 的一部分)。

    我假设给定了NK(可能还有C),并且您的矩阵被声明为

    dim(C, [N,N]),
    dim(X, [N,N,K]),
    dim(Y, [N,K]),
    

    然后您可以在循环中设置约束:

    约束:∑(k=1..K) Yik=1(对于 N 中的所有 i)

    ( for(I,1,N), param(Y) do
        sum(Y[I,*]) $= 1
    ),
    

    请注意,当K 是此数组维度的大小时,此处的符号sum(Y[I,*])sum([Y[I,1],Y[I,2],...,Y[I,K]]) 的简写。

    为了您的目标,由于嵌套总和,仍然需要辅助循环/列表:

    OBJ:最小值 ∑(i=1..N)∑(j=1..N) Cij * ∑(k=1..K)Xijk

    ( multifor([I,J],1,N), foreach(Term,Terms), param(C,X) do
        Term = (C[I,J] * sum(X[I,J,*]))
    ),
    Objective = sum(Terms),
    ...
    

    然后您必须将此目标表达式传递给求解器 - 详细信息取决于您使用的求解器(例如 eplex、ic)。

    【讨论】:

    • jschimpf ,非常感谢,但是为什么你使用 * 而 k 是索引?敏怎么样了。我看不到答案?
    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多