【发布时间】:2020-05-09 16:36:24
【问题描述】:
我正在寻找一种惯用的约束满足求解器,它可以最大化或最小化目标函数,而不是生成匹配解决方案的列表。
确切地说,我对最小化(例如,必须满足其他约束条件的路线上的汽油消耗量)更感兴趣,但问题是:
我目前正在查看 core.logic,并且我的印象是该模块不会执行最大值或最小值。据我了解,该功能通常会专门表示为 CLP。 Core.logic 确实提到了 CLP(FD) (https://github.com/clojure/core.logic/wiki/Features),但看描述,我一直有严重的疑问。
有人可以对此发表评论吗?我猜,因为我通读整本 Reasoned Schemer 的书太多了?
【问题讨论】:
-
您能否提供一个代表您要解决的问题类型的优化问题示例?目标函数是什么?有什么限制?未知数是实数还是整数?
-
@Rulle 例如,在物料清单中,您必须从众多潜在供应商中找到最佳组合,每个供应商都提供一些所需的物品,但价格和质量因情况而异。因此,您希望在满足质量标准的同时最大限度地降低成本。
-
这听起来像是一个线性规划 (en.wikipedia.org/wiki/Linear_programming) 问题。我在回答中提到的 ojAlgo 对此很有用。如果您具体而准确地说明目标函数是什么、项目是什么、质量标准是什么等,那么有人可能会提供帮助。
-
谢谢。猜猜,我必须先玩一下你建议的库,然后才能提出一个好问题。
-
不客气。我建议您首先列出您的变量,这可能是每个供应商的每件商品的数量。最小化的目标函数将是按单位价格加权的所有数量的总和。然后对于最低可接受质量,每种类型的项目都会有一个线性不等式约束。您可以使用我回答中的示例作为模板。
标签: clojure clojure-core.logic