问题标签 [lpsolve]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 具有字符和列总和约束的 R 中的 lpSolve
我有一个房间列表,房间的最大平方英尺,程序,程序的最大平方英尺,以及房间匹配(匹配#)预期程序使用的值。在帮助下,我能够最大限度地利用每个房间一个程序的匹配 # 和平方英尺。但是,我想将这一分析更进一步,并允许同一房间内的多个节目或同一节目的倍数,如果它具有最高匹配#,只要倍数仍然符合平方英尺要求。此外,我想总体上告诉 lpSolve,我只想要整个建筑中的“x”个办公室、“y”个工作室等。到目前为止,这是我的数据和代码:
所以现在我的问题是如何让求解器最大限度地使用平方英尺并匹配每个房间(列)内的 # 并允许多个相同的程序或程序组合来完成此任务?我知道我必须取消“mod”中的“<= 1”限制,但我不知道如何让它在每个房间中找到最合适的位置,然后最终整体上。
房间 [,1] 的解决方案是:
并且它将尝试在房间内安装 11 个封闭式办公室,这些办公室的最佳匹配得分远高于 1 个协作空间(8 个匹配)和 1 个存储/档案(4 个匹配),总共 12 个匹配。
因此这引出了我的下一个问题,即限制我的解决方案矩阵中某些程序的总数。我想它会包括某种
但我也不知道如何限制它。这些数字对于所有程序都是不同的。
感谢您提供任何和所有帮助,并随时要求任何澄清。
更新: 约束
- 最大化每个房间的匹配 # (obj.vals)。
- 最大化每个 room.size 平方英尺内的 program.size 平方英尺。通过多次使用相同的程序(5 个封闭办公室)或组合程序(1 个协作空间和 1 个表演)来做到这一点。
- 限制和/或强制解决方案中返回的程序数量。只要不超过我在所有房间中为该程序提供的最大数量,这些程序就可以在房间之间进行拆分。(在所有 28 列中只能选择 5 个封闭式办公室、8 个工作室/教室、1 个制造等。
r - lpsolve不在R中打印lp模型
我是 R 中 LP 建模的新手。我正在使用 lpSolveAPI。当我尝试一个带有两个决策变量的小示例并打印模型时,它会打印完整的模型。
但是当我尝试使用 25 个决策变量的模型并添加一些约束后,如果我尝试打印模型,那么它只会说:
请建议如何显示更大的模型。
r - 如何更改 lpSolve 中的重量限制?
我将 CCR 数据包络分析模型应用于股票数据之间的基准测试。为此,我正在运行此处发表的 DEA 论文中的 R 代码。本文档使用 lpSolve 解决线性问题。lpSolve 的文档在这里。
本文档附带有关如何在 R 中实现以下模型的分步说明。
背景资料:
数据包络分析 (=DEA) 是一种面向数据的方法,用于评估称为决策单元的一组实体的性能,这些实体将多个数据输入转换为多个数据输出。DEA 用于评估和比较决策单元 (DMU) 的性能通过考虑生产单位与效率边界的接近程度来确定生产单位的相对效率。
我们假设有 n 个 DMU 需要评估。每个 DMU 消耗不同数量的不同输入以产生不同的输出。具体来说就是消耗输入量,产生输出量。我们进一步假设 , ≥ 0 并且每个 DMU 至少有一个正输入和一个正输出值。在 CCR 模型中,目标是确定权重,使用线性规划来最大化每个决策单元的复合效率。这是由比率定义的:
然后变成这样的线性问题:
应用:
我将此效率模型应用于股票数据 CAPM 风险因素:
这是一个 5 个输入 - 1 个输出的案例
这里的目标是为分析的每个资产找到“最佳”权重集(1、1…5)。此处使用的术语“最佳”表示当这些权重分配给所有 DMU / Stocks (1...10) 的输入和输出时,上述比率相对于所有其他比率最大化。
这是经过标准化的原始样本 z 得分数据,所有值都介于 0 和 1 之间。
我现在通过从开头提到的论文中提取的 R 代码运行上述数据。请注意,testdfst
数据框中的截距变量被排除在计算之外。
代码说明:
可能与我的问题有关: 注意 z >= 0 部分?如果我错了,请纠正我,但 lpSolve 必须默认采用这个,因为这个限制不直接包含在代码中?如果我能正确识别这部分,我可以对其进行调整以解决我的问题。
问题:
这是最终结果:
在所有情况下,RMRF 输入的权重都被分配为 0。为了使这种效率措施与我应用它的上下文相关,有必要在每次计算中考虑所有 5 个输入。
我要解决的问题是进一步限制权重。我希望将所有 5 个输入合并到问题中,所以我想像这样限制“v”权重:
这与
这样,所有权重都应限制为最大比任何其他权重大 5 倍,并且最小也小 5 倍。
我一直在检查模型中的每个变量,并尝试了一些不同的数据集。我还交换了数据帧中 rmrf 和 smb 的位置,试图查看是代码有问题还是数据有问题。
在尝试了不同的数据集之后,似乎存在包含 RMRF 的例外情况(如上面的那个)。我开始相信我的问题的答案可能非常简单。该程序发现最好不将我的 RMRF 输入包含在计算中。对此的解决方案是对权重进行额外限制。
这是具有非标准化输入的解决方案示例(数据中的数字分布完全不同)
php - Lpsolve for php 帮助安装
我是新来的,我真的需要你的帮助。我正在尝试使用 lpsolve,我需要一些帮助。我按照文档中的步骤进行操作。我还阅读了关于 lpsolve for PHP 的所有内容。
optimization - 使用线性规划绘制最长路径
我有一个没有循环的加权有向图,我希望定义约束,以便我可以通过线性规划解决路径权重的最大化问题。但是,我无法解决如何做到这一点。
为此,我希望使用 LPSolve 工具。我曾想过制作一个邻接矩阵,但我不知道如何使用 LPSolve 来完成这项工作。
如何使用约束定义每个节点的可能路径,并使其足够通用,以便轻松适应其他图形?
r - 如何在线性程序中使用“OR”语句?
我有兴趣在线性程序中构建本质上是or语句的东西。目前我在 R 中使用 lpSolveAPI,但我也希望得到有关此类问题的线性编程最佳实践的答案。
这是使用 lpSolveAPI 包的一些工作代码:
当您运行此代码并查看结果时,您会看到 x6 = 0.9、x7 = -0.1 和 x8 = -0.2。对此的解释是 90% 的b被购买而 30% 的b被出售。
我正在寻找建立一个约束,要求如果a或b在任何地方出售,它也不能被购买。(反之亦然)
在这种特殊情况下,我希望最佳解决方案是出售 20% 的a(x3)和购买 20% 的b(x5 或 x6)。x = (0, 0, -0.2, 0, 0.2, 0, 0, 0)
换句话说,如果您选择在 x1 和/或 x2 中具有非零值,则在 x3 和/或 x4 中必须具有 0。类似地,如果您选择在 x3 和/或 x4 中具有非零值,则在 x1 和 x2 中必须具有零值。
constraints - 如何说变量是线性规划中的三个值之一
我正在使用 LPSolve 来解决线性问题,但是我在表达自己的约束时遇到了问题。我想在我的约束条件下写下变量 t3 是三个值之一。所以我做了这样的事情:
(这只是一个例子,当然不是实际的事情,否则 t4、t1 和 t8 什么都不做)。然而 t3 的最终值是最高的而不是最低的......我可能做错了什么,我认为这是有道理的。当然,如果我尝试最大化 t3 是行不通的,因为没有上限,但我认为这不是真正的问题。
floating-point - 线性规划精度
我正在研究一个线性问题以最小化。它定义明确,主要使用 [0;1] 范围内的数字。Excel 的线性求解器和 Mathematica 的 LinearProgramming 确实找到了一个解决方案,但是我认为它以一种糟糕的方式违反了我的一个约束:
约束必须等于 0 才能使我的解决方案有效,而两个求解器都将数字 ~10E-17 放在那里并将其视为满意。我尝试以准确性进行操作,但是当我低于 10E-17 时,它表明问题不是线性的,这是错误的。自动缩放也无济于事。
我知道它处理计算机中使用的浮点数的有限准确性。我想确定我是否注定要在这里,或者是否有任何技巧可以克服这个问题。
r - 如何使用 LpSolve 在 R 中设置线性规划优化?
例如,我有这个示例数据:
看起来像这样:
x
并表示来自和的y
索引。表示与 比较的分数。我想从 中最大化总分(或),其中 的每个值最多与 的一个值匹配,反之亦然。datax
datay
w
datax[x]
datay[y]
w
d
x
y
结果应如下所示:
w
所有值的总和最大化,并且x
每个值y
在结果中只出现一次。
如何在lpSolve::lp
函数中设置此问题?
r - 使用 lpSolveAPI 获取 0/1-Knapsack MILP 的多种解决方案
可重现的例子:
我用R中的lpSolveAPI描述了一个简单的0/1- Knapsack问题,它应该返回 2 个解决方案:
问题:
但get.solutioncount(lp_model)
表明只1
找到了解决方案:
我希望有 2 个解决方案:1 0 1
和0 1 1
.
我试图通过lpSolve的num.bin.solns
参数,但解决方案的数量仍然存在。solve(lp_model, num.bin.solns=2)
1
问题:
我怎样才能得到两个正确的解决方案?我更喜欢使用lpSolveAPI,因为 API 非常好。如果可能的话,我想避免直接使用lpSolve。