问题标签 [linear-optimization]
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.
ojalgo - 从 ojalgo 获得良好的次优解以进行线性优化
介绍
我正在尝试使用 ojalgo 库来生成一种解决方案,以控制放置在任意位置的推进器以生成整体请求的旋转和平移。有时请求的旋转和平移是不可能的,但我希望在这些情况下试一试。
问题
我已经创建了我设置的 ExpressionsBasedModel 的这个最小示例。
如果我请求一组可能的条件,我会得到一个很好的结果:
但如果我要求一些不太可能的事情
理想情况下,我想要一个好的次优解决方案(1,1),但它似乎放弃并返回 0.5,0.5
问题
对于不可能完全解决的问题,是否有可能获得良好的次优解决方案?
可能的问题是我想最小化表达式上的错误,但我认为它实际上最小化了值(同时试图满足约束)
c# - Math.net 中的线性优化
Math.NET 似乎有大量专用于非线性优化的函数,这似乎意味着它也有一些执行线性优化的能力,但我一直在查看文档,似乎无法弄清楚了解如何使用包来做到这一点。
python - Gurobi 说该模型不可行,但我可以手动提出解决方案。Python 实现
这是我的模型。Gurobi 说它不可行。如果难以理解,我深表歉意。
但是,我可以很容易地手动提出解决方案,例如:
既然我可以手动提出解决方案,为什么模型不可行?我在这里错过了什么吗?也许我安排约束的顺序是错误的?任何帮助表示赞赏。
cvxpy - 具有变量依赖性的线性优化
我遇到了线性优化问题。最终目标是在几个项目和几周内获得最佳生产数量 (prod_qty)。
现在,问题如下: 作为优化问题的一部分,我知道每个项目和每周的需求。在求解 prod_qty 时,我想最小化过剩(prod_qty - 需求 > 0)和未满足的需求(需求- prod_qty > 0)。
这就是这变得困难的原因:我不希望我的求解器在我的求解范围内的给定一周后满足任何未满足的需求。本质上,当一周内我无法满足需求时,我只想在下一周忘记这一点。因此,在接下来的一周,在计算新的未满足需求或过剩时,我不会包括上周的未满足需求。但是,如果我在给定的一周内创造了过剩 - 在下周优化器必须“记住”过剩是可用的,因此将其包括在下周的过剩或未满足需求的计算中。
我遇到的问题是这个(使用cvxpy):
我设法创建了一个变量“excess”,就像这个本质上一样
max(0,(prod_qts[0,:] - net_dmd_mtrx_np[0, :]))
或max(0, (balance_pos[dte-1,:] + prod_qts[dte,:] - net_dmd_mtrx_np[dte, :]))
取决于我们查看的星期:
我的目标函数看起来有点像这样:
用这个运行我的代码后,我成功地获得了正确的过剩(也就是说,正确地忽略了我们也应该最小化未满足的需求这一事实)。
我现在如何创建独立于多余列的第二个变量“未满足”,以便在最小化两者时不会遇到任何问题?我尝试以非常相似的方式添加它:
如果目标函数不变,则再次创建预期输出。但是,我实际上希望目标函数成为
但是在将第二个和引入目标函数后,我现在在解决问题后没有收到预期的过剩和未满足。我认为这与以下事实有关,excess [dte,:] >= (excess [dte-1,:] + prod_qts[dte,:] - net_dmd_mtrx_np[dte, :])
并且unmet[dte,:] >= (net_dmd_mtrx_np[dte, :] - prod_qts[dte,:] - excess[dte-1,:])
清楚地表明了实际上我不想存在的未满足和过度之间的直接关系。
我一直在尝试引入虚拟变量的想法,例如 dummy_excess = 1 if extra = 1 to enforce unmet[dte,:] >= np.multiply((net_dmd_mtrx_np[dte, :] - prod_qts[dte,:] - excess[dte-1,:]), 1-dummy_excess)
。不幸的是,该术语np.multiply((net_dmd_mtrx_np[dte, :] - prod_qts[dte,:] - excess[dte-1,:]), 1-dummy_excess)
的曲率未知,因此不遵循凸优化的 dcp 规则。
欢迎任何有关如何作为线性优化框架的一部分解决此问题的建议。
python - 使用 pyomo 进行线性优化
我最近开始尝试学习 python 以解决线性优化问题。我正在努力减少家庭的二氧化碳排放量。求解器应该在从电网获取电力(包括一定量的二氧化碳)和从光伏发电之间进行选择。可悲的是,我似乎太愚蠢而无法正确解决问题,并且求解器对 8 个时间步中的每一个都持续计算 8 次(时间步数)。
这是一个只有 8 个时间步的测试版本,只是为了测试我是否能够将它从 Excel 中提取出来,而不是自己手动输入字典。
如前所述,通过在电网电力(“进口”)和光伏发电(“Eigenproduktion”)之间进行选择,该计划应该始终等于需求。它也应该在 8 小时内完成。
出于某种原因,它一直在这样做:
java - Apache Commons Maths 3.6.1 中的 SimplexSolver 示例
我是线性优化的新手,目前正在尝试使用SimplexSolver.class
from org.apache.commons.math3.optim.linear
。
因此,我查找了一些有关如何使用它的示例,以了解它,并回想 Simplex 算法的确切处理方式及其工作原理。
但不幸的是,我遇到了一些问题。对于我能找到的所有示例,该类都是以这种方式使用的:
但是示例中的参数不符合函数的当前期望optimize
。查看文档对我来说不是很有帮助,因为它只是说我需要一个 type 参数OptimizationData
。因为OptimizationData
只是一个接口,我真的不知道该用哪种类型。
有没有人有一个如何optimize
正确使用该功能的例子?
optimization - model.update 模型中的性能
我对 gurobipy 库中 model.update 的性能有疑问。
假设我有一个对象列表,我想将其作为变量添加到模型中,我还想为每个对象添加一个约束,为此我有一个 for 循环,我在其中执行以下操作
当然我的循环比较复杂,这只是一个简单的例子。我在日志中收到此消息:
信息:警告:模型更新花费的时间过多。信息:考虑不那么频繁地调用更新。
我现在的问题是:正确的解决方案是制作两个循环而不是像这样的一个:
然后打电话
然后通过添加约束来运行循环?
哪一种是通常的方式,或者我应该完全不同?