标签: linear-programming

如何在 MATLAB 中绘制 ax+by-c 的线?

标题基本上说明了一切。我正在做一项作业,需要包括我的散点图和 生成的线linprog()

我运行linprog()并得到了值:

1.0000
1.0000
16.5000
12.5000
Run Code Online (Sandbox Code Playgroud)

分别为abcf。我的线的方程式是:

ax + by - c = 0
Run Code Online (Sandbox Code Playgroud)

我知道这是一个简单的问题,但我整晚都在寻找答案,但什么也没有出现。有人可以帮我吗?

matlab plot graph linear-programming

3
推荐指数
1
解决办法
4593
查看次数

使用 Pulp 更新约束

假设有一个线性程序和以下形式的约束:

\n\n
4 x_1 + 3 x_2 \xe2\x89\xa4 10\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且您想要将其更新为

\n\n
4 x_1 + 3 x_2 + 10 x_3 \xe2\x89\xa4 10\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
3 x_2 \xe2\x89\xa4 10\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了做到这一点,我从头开始“重写”约束,就像

\n\n
prob.constraints[0] = ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

但对于很长的约束来说,这是非常低效的。

\n\n

是否有更简单的方法来添加或删除约束中的变量?

\n

python linear-programming pulp

3
推荐指数
1
解决办法
2277
查看次数

线性规划:非重叠约束?

我想在线性程序(或必要时使用 MIP)中编写一个非重叠约束(即 2 个矩形不重叠)。我知道如何在约束编程中做到这一点:

对于对象 i 和 j:

x[i]+dx[i]<=x[j] 或 y[i]+dy[i]<=y[j] 或 x[j]+dx[j]<=x[i] 或 y[ j]+dy[j]<=y[i] 其中 x 和 y 是包含对象坐标的数组,dx 和 dy 是对象的维度。

知道在 LP/MIP 中执行此操作的最佳方法吗?谢谢!

linear-programming mixed-integer-programming

3
推荐指数
1
解决办法
1917
查看次数

在线性规划中表达 OR 约束

我在线性程序中有一个浮点变量x,该变量应位于0两个常量CONSTANT_A和之间或之间CONSTANT_B

LP.addConstraint(x == 0 OR CONSTANT_A <= x <= CONSTANT_B)

当然,OR线性规划中不存在显式的东西。有没有办法表达这个约束?

constraints linear-programming

3
推荐指数
1
解决办法
4614
查看次数

为分配/指派问题建立线性规划

我在线性程序方面遇到了一些麻烦,我已经解决并使用 Excel,但现在我想在 R/Python 中执行它,因为我已经达到了 Excel 和求解器的限制。因此,我就这个特定主题寻求帮助。

我通过改变 lp.assign 函数尝试使用 lPsovle 包,但我无法想出解决方案。

问题如下:

假设我是商品的交付者。

我有不同的仓库,服务于不同的区域。这些地区必须满足他们的需求。另一方面,我的仓库的处理和交付能力受到限制。一个站点可以服务多个区域,但一个区域只能由一个站点服务。

我有仓库和区域之间连接的距离/成本矩阵以及该区域的需求。

该解决方案的目标应该是以尽可能最小的努力为这些区域提供服务。

假设成本/距离矩阵如下所示:

assign.costs <- matrix (c(2, 7, 7, 2, 7, 7, 3, 2, 7, 2, 8, 10, 1, 9, 8, 2,7,8,9,10), 4, 10)
Run Code Online (Sandbox Code Playgroud)

因此,这创建了我的矩阵,其中第一行/标题中包含客户/区域,第一列/行名称中包含仓库。

现在地区/客户的需求是:

assign.demand <- matrix (c(1,2,3,4,5,6,7,8,9,10), 1, 10)
Run Code Online (Sandbox Code Playgroud)

容量限制,存款可以提供的金额是:

assign.capacity <- matrix (c(15,15,15,15), 4, 1)
Run Code Online (Sandbox Code Playgroud)

所以现在我希望这个问题可以通过 lp 来解决,以生成分配,根据这些限制,哪个区域应该由哪个仓库提供服务。

结果应该是这样的:

assign.solution <- matrix (c(1,0,0,0 ,0,1,0,0, 1,0,0,0, 1,0,0,0 ,0,0,0,1), 4, 10)
Run Code Online (Sandbox Code Playgroud)

至于限制,这意味着每一列最多只能有一个。

我尝试使用 lpSolve 中的 lpsolve 和 lp.assign 函数,但我不知道如何实现我所拥有的确切类型的限制,并且我已经尝试更改 lp.assign 函数,但没有成功。如果有帮助的话,我还可以制定 lp 的方程。

谢谢大家的帮助,我现在真的很困难:D …

optimization r linear-programming operations-research

3
推荐指数
1
解决办法
703
查看次数

通过置换 R 中的列来最大化矩阵的对角线

我正在使用 R 中的方阵,我们可以称它为mat,并且想要排列列(即改变它们的顺序)以最大化对角线元素的总和。我想通过线性规划方法来做到这一点,即依靠优化包 lpSolve。代码解决方案当然值得赞赏,但如果失败,任何将其表述为线性规划问题的帮助将不胜感激。

我的问题类似于这个问题:置换方形 2 向列联表(矩阵)的列以最大化其对角线. 但是,在那个问题以及我在 SO 上发现的其他问题中,按行最大化该行中的对角线元素就足够了。问题是像

mat2 <- mat[,max.col(mat, 'first')]

不会对我有用:你可能会遇到这样的情况:一行有多个相等的最大值,或者(比如)在第 X 行中,你在对角线上选择 11 而不是 10,但因此在第 X+1 行你被迫有5 在对角线上而不是 30,因为 30 与 10 属于同一列。

我知道有一种称为匈牙利算法的算法可以执行此操作,但是除了 lpSolve 之外,我无法使用任何包来应对此挑战。

optimization r matrix linear-programming lpsolve

3
推荐指数
1
解决办法
511
查看次数

有条件的房间分配和调度任务——优化算法

我需要找到一种合适的方法作为基础,用于开发执行以下操作的优化算法:

假设我们有 N 个任务要做,我们有 M 个房间,每个房间都包含一些特定数量的基础设施/条件。每项任务都需要使用具有适合任务条件的房间。

例如,为了完成任务 A,我们需要使用水龙头和煤气管道,所以我们只能使用包含这些的房间。

此外,对于每项任务,我们都有一个预定义的截止日期。

我希望我已经解释得足够好。

所以,我需要开发一种算法,可以在适当的调度中为每个房间分配任务,这样我就可以在最短的总时间和不超过截止时间的情况下完成所有任务(如果超过是不可避免的,那么得到最少的最糟糕的答案)。

我可以基于哪些现有方法或算法并从中学习?我虽然关于“工作坊”,但我想知道是否有其他合适的算法可以处理这样的问题。

algorithm optimization scheduling linear-programming

3
推荐指数
1
解决办法
327
查看次数

Julia/JuMP 中带有 2 个迭代器的 For 循环

我需要为 JuMP/Julia 实现以下伪代码:

forall{i in M, j in Ni[i]}:  x[i] <= y[j];
Run Code Online (Sandbox Code Playgroud)

我想象这样的事情:

for i in M and j in Ni[i]
    @constraint(model, x[i] <= y[j])
end
Run Code Online (Sandbox Code Playgroud)

如何在 for 循环中正确实现 2 个迭代器?

optimization mathematical-optimization linear-programming julia julia-jump

3
推荐指数
1
解决办法
222
查看次数

我如何限制 COIN-CBC 的运行时间,因为 maxSeconds 参数似乎对我不起作用?

我想使用 COIN-CBC(或 PuLP 提供的任何其他免费 MIP 求解器)求解一个小型混合整数程序,但时间限制为 10 秒。但是, maxSeconds 参数似乎对我不起作用。

举个例子,我这​​样调用没有时间限制的求解器:

prob.solve(pulp.PULP_CBC_CMD())
Run Code Online (Sandbox Code Playgroud)

我这样称呼它有时间限制:

prob.solve(pulp.PULP_CBC_CMD(maxSeconds=10))
Run Code Online (Sandbox Code Playgroud)

前者在 50.89 秒后终止,解值为 15.65287864835175。后者在 53.53 秒后终止,解值为 15.65287864835175。我预计它会在(大约)10 秒内终止,可能具有更高的解值。

(我知道这篇文章:Time limit for mix integerprogramming with Python PuLP。但它的答案参考了 CPLEX 和 GUROBI,我无法使用它们;我需要一个免费的求解器。)

难道我做错了什么?

python linear-programming pulp

3
推荐指数
1
解决办法
2984
查看次数

找到最适合目标向量的向量线性组合

我试图找到多个预测的权重,以给出尽可能接近已知目标的结果(例如均方误差)。

以下是一个简化示例,显示了四个数据点的三种不同类型的预测:

target = [1.0, 1.02, 1.01, 1.04]  # all approx 1.0
forecasts = [
    [0.9, 0.91, 0.92, 0.91],  # all approx 0.9
    [1.1, 1.11, 1.13, 1.11],  # all approx 1.1
    [1.21, 1.23, 1.21, 1.23]  # all approx 1.2
]
Run Code Online (Sandbox Code Playgroud)

其中,一个预测值始终约为 0.9,一个预测值始终约为 1.1,一个预测值始终约为 1.2。

我想要一种自动找到[0.5, 0.5, 0.0]三个预测的权重的方法,因为对前两个预测进行平均并忽略第三个预测非常接近目标。理想情况下,权重应限制为非负数且总和为 1。

我需要使用某种形式的线性规划或二次规划来做到这一点。我已经安装了 Python fourprog 库,但我不确定如何将此问题转换为此类求解器所需的形式。有人能指出我正确的方向吗?

python linear-programming quadprog quadratic-programming

3
推荐指数
1
解决办法
1649
查看次数