0

我必须找到整数规划问题的解决方案:

在此处输入图像描述

我正在使用 Mosek 的 Fusion API (Python)。现在约束很容易放入,我更担心实际目标。我的问题是:我如何告诉 mosek 我想对所有is、js 或ks 求和并定义它们是什么,它们的边界是什么等?

这是服务器上下文中自缓存问题的简化版本。所以i这里指的是服务器,j指的是要缓存的对象,但在这个版本中只有一个对象,所以我想这并不重要。k也表示 server ,所以 eg表示从 server到 serverd(ik)的距离。ik

但是无论我想实现什么,我都不知道如何写这个目标。现在我有这样的事情:

from mosek.fusion import Domain, Model, Expr, ObjectiveSense

alpha = 4 # alpha is the same for all i and j
demand = 1 # w is the same for all i and k
n = 6 # number of servers
distances_matrix = [[...], [...], ...]


with Model("lo1") as M:

    x = M.variable("x", n, Domain.integral(Domain.inRange(0, 1)))
    y = M.variable("y", n, Domain.integral(Domain.inRange(0, 1)))

    alpha_times_x = Expr.mul(alpha, x)
    demand_times_dist_times_y = Expr.mul(demand, distances_matrix, y)

    M.objective("obj", ObjectiveSense.Minimize, )

    M.solve()

    print(x.level())
    print(y.level())

现在当然demand_times_dist_times_y是错误的,因为我想得到矩阵i的距离。以上很好,因为 xs 是: k,但 ys 必须是,所以我想我把它们定义错了。x{x0, x1, x2, x3, x4, x5, x6}{y11, y12, y13, y14, y15, y16, y21, y22, ..., y66}

那么,例如,我如何定义 i,k 在其中并通过例如 k{1,2,3,4,5,6}创建一个?Expr.sum我将如何在目标开始时定义这两个总和?

4

1 回答 1

1

我不知道这是否能回答这个问题,但如果你有,请说

x = M.variable("x", n, Domain.integral(Domain.inRange(0, 1)))

然后 sum_i x_i 通过

Expr.sum(x)

类似地,如果 nowalpha是一个长度为数值的数组,n那么 sum_i (alpha_i*x_i) 通过

Expr.sum( Expr.mulElm(alpha,x) )

甚至

Expr.dot( alpha, x )

等等。Expr.sum您永远不会明确指定总和索引,而是将出现在方法和类似方法中的所有条目相加。

于 2020-01-07T07:39:13.283 回答