gpt4 book ai didi

prolog - Prolog是解决此类问题的最佳语言吗?

转载 作者:行者123 更新时间:2023-12-02 08:19:17 27 4
gpt4 key购买 nike

我遇到的问题包含一些不等式和最小化值的要求。在网上做了一些研究后,我得出的结论是使用 Prolog 可能是解决这个问题的最简单的方法。然而,我以前从未使用过 Prolog,我不想浪费时间学习它,只是为了发现它不是适合这项工作的工具。

如果你了解 Prolog,请看一下这个问题并告诉我 Prolog 是否正确。或者,如果您知道真正适合此目的的其他语言。

a + b + c >= 100
d + e + f >= 50
g + h >= 30

if (8b + 2e + 7h > 620) then y = 0.8 else y = 1.0
if (d > 35) then x = 0.9 else x = 1.0

5xa + 8yb + 5c + 3xd + 2ye + 2f + 6xg + 7yh = w.

我需要找到使 w 最小化的 a、b、c、d、e、f、g 和 h 的值。

请注意,以上只是一个示例。在实际程序中,我会使用最多 10000 个变量和最多 20 个 if..then 子句。这排除了线性编程作为替代技术的可能性,因为测试所有 LP 问题需要大量的 RAM 和时间。

我并不是真的要求代码,尽管如果 Prolog 真的很适合的话,我会很感激一些如何解决这个问题的提示。谢谢。

最佳答案

您可以看看约束逻辑编程,CLP(R)、CLP(Q) 或 CLP(FD)。您的问题可以按如下方式编码到 CLP(R) 中(我认为):

:- use_module(library(clpr)).test(sol([A,B,C,D,E,F,G,H], [X,Y,W])) :-    {A >=0, B >=0, C>=0, D>=0, E>=0, F>=0, G>=0, H>=0},    {A + B + C >= 100},    {D + E + F >= 50},    {G + H     >= 30},    {5*X*A + 8*Y*B + 5*C + 3*X*D + 2*Y*E + 2*F + 6*X*G  + 7*Y*H = W},    (({8*B + 2*E + 7*H > 620},{Y=0.8}) ; ({8*B + 2*E + 7*H =35},{X=0.9}) ; ({D=

Using SICStus Prolog, I get the following answer:

| ?- test(A).A = sol([_A,0.0,_B,0.0,_C,_D,30.0,0.0],[1.0,1.0,780.0]),{_A=100.0-_B},{_C=50.0-_D},{_B==0.0},{_D>=0.0} ? ;no

关于prolog - Prolog是解决此类问题的最佳语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com