标签: gringo

如何用 Clingo 求和?

我有以下数据集:

food_a(bagel, 245).
food_a(sandwich, 200).
food_a(salad,300).
food(bagel).
food(sandwich).
food(salad).
Run Code Online (Sandbox Code Playgroud)

我想满足以下约束:给定总卡路里数,我想返回满足该限制的食品。例如。总卡路里计数 = 500,程序应返回“百吉饼+三明治”作为解决方案。我按照 clingo 代码对他进行了编码:

food_a(bagel, 245).
food_a(sandwich, 200).
food_a(salad,300).
food(bagel).
food(sandwich).
food(salad).
has(bagel, wheat).
has(sandwich, bread).
has(sandwich, tomatoes).
has(sandwich, onion).
has(sandwich, cheese).
%calories(food,amount):-food_a(food,amount).
%food(F):-food_a(F,C).
%limits(calories,200).

%sol(F) :- food_a(F,C1),food_a(F,C2), C1+C2<500.
%:- {food(F,C) : food_a(F,C1),food_a(F,C2)} , C1+C2 >500.

%food_diet(F) :- food(F,C), C<250.
%:- food(F1) ,food_a(F2,C2), C1+C2=445.

totals(P, S) :- S = #sum{ I : food_a(P,I)}, food(P), S<500.
Run Code Online (Sandbox Code Playgroud)

我得到的输出在屏幕截图中: 在此输入图像描述

显然,该程序只返回单一食物,而不是一次考虑 2 或 3 个食物的组合。任何人都可以建议我必须遵循的更改或步骤才能实现相同的目标。

answer-set-programming clingo gringo

2
推荐指数
1
解决办法
3762
查看次数

标签 统计

answer-set-programming ×1

clingo ×1

gringo ×1