gpt4 book ai didi

prolog - 使用 prolog 从成分集合中生成食谱

转载 作者:行者123 更新时间:2023-12-01 05:16:56 24 4
gpt4 key购买 nike

我可以使用我已经知道的语言来解决这个问题,但我希望使用 prolog(可能还有 clpfd)来解决这个问题,因为我想学习这些技术。我看到一些使用 SQL 的类似问题的引用,但这不是我感兴趣的。

我有一个成分的集合,每个成分都有卡路里计数、蛋白质含量、脂肪含量等属性。不会超过几十种成分,可能不超过六种属性。在 C 中,我会将其建模为一个结构数组。

然后,我希望能够生成使用受约束的成分组合的食谱。例如,总热量<1000,脂肪少于30%,蛋白质超过25g。我可能还想说“不包括白米饭”,例如因为我现在没有白米饭了。

答案可能是一系列项目,例如“125 克鸡肉、25 克胡萝卜、100 克米饭”。

我是否在正确的轨道上使用 prolog/cplfd 做到这一点?是否存在使其不适合初学者的特殊困难(尽管我是其他语言的经验丰富的程序员)?

我将如何建模这个数据库?我看到序言有列表和元组..我会把它表达为一个元组列表吗?

我是否能够表达数学约束,例如“总卡路里 < 1000 和来自脂肪的卡路里 < 总卡路里和蛋白质的 30% > 25 克”?

我可以搜索此类问题的名称吗?

是否有我可以用作指南的现有序言示例?

最佳答案

这将是一个非常简洁的程序,我希望你能实现整个事情并写下来。请让我知道你想出了什么!

我可以很容易地看到如何处理您的示例约束。代码如下所示:

% these operator declarations are just guesses!
:- op(500, xfy, and).
:- op(600, xf, grams).
:- op(600, yfx, of).

test(Recipe, X < Y) :-
evaluate(Recipe, X, XV),
evaluate(Recipe, Y, YV),
XV < YV.

test(Recipe, X and Y) :-
test(Recipe, X), test(Recipe, Y).

evaluate(Recipe, total_calories, X) :- total_calories(Recipe, X).
evaluate(Recipe, Const, Const) :- number(Const).

total_calories(Recipe, Total) :-
maplist(calories, Recipe, Calories),
sum(Calories, Total).

calories(X grams of Y, Calories) :-
caloric_content(N grams of Y, C),
Calories is X/N * C.

caloric_content(100 grams of chicken, 195).

我认为这是我如何继续测试食谱的一个不错的草图。生成它们将非常有趣。我想你会想要限制你的食谱写作。弄清楚如何约束它的最好办法可能是天真地编写它,然后逐个引入更正。我最好的猜测是这样的:
meat(chicken).
vegetable(carrots).

recipe([MeatAmount grams of Meat, VegAmount grams of Vegetable]) :-
meat(Meat),
vegetable(Vegetable),

然后你会想要通过某种猜测数量的方式来增加它。另一个要探索的想法是将这两个方面结合起来,以便您添加的每个成分都处理一些约束。这样你就可以保持搜索的方向性,而不是漫无目的地乱扔东西。我希望这能给你一些想法!

关于prolog - 使用 prolog 从成分集合中生成食谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437444/

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