Algorithm 谜题搜索过程的树表示

Algorithm 谜题搜索过程的树表示,algorithm,optimization,prolog,artificial-intelligence,graph-algorithm,Algorithm,Optimization,Prolog,Artificial Intelligence,Graph Algorithm,我应该把1个大盒子和3个小盒子放在架子上,如下图所示,使用最小的能量 大箱子的长度和重量是小箱子的两倍。架子的长度是一个小盒子长度的三倍。上搁架的位置是下搁架高度的两倍 如何表示搜索过程的树(例如使用Uinform成本搜索)?您可以使用约束逻辑编程(此处)解决此问题。您可以使用数值域上的变量对问题进行建模,并调用内置的搜索例程。为简单起见,我假设长度=重量 :- lib(ic). :- lib(branch_and_bound). solve(Vars, Energy) :- Va

我应该把1个大盒子和3个小盒子放在架子上,如下图所示,使用最小的能量

大箱子的长度和重量是小箱子的两倍。架子的长度是一个小盒子长度的三倍。上搁架的位置是下搁架高度的两倍


如何表示搜索过程的树(例如使用Uinform成本搜索)?

您可以使用约束逻辑编程(此处)解决此问题。您可以使用数值域上的变量对问题进行建模,并调用内置的搜索例程。为简单起见,我假设长度=重量

:- lib(ic).
:- lib(branch_and_bound).

solve(Vars, Energy) :-

    Vars = [TopSmall, TopLarge, BotSmall, BotLarge],

    TopSmall :: 0..3,                       % how many small boxes on top
    BotSmall :: 0..3,                       % how many small boxes on bottom
    TopLarge :: 0..1,                       % how many large boxes on top
    BotLarge :: 0..1,                       % how many large boxes on bottom

    TopSmall + BotSmall #= 3,               % total small boxes
    TopLarge + BotLarge #= 1,               % total large boxes

    TopWeight #= TopSmall*1 + TopLarge*2,   % total on top
    BotWeight #= BotSmall*1 + BotLarge*2,   % total on bottom

    TopWeight #=< 3,                        % shelf capacities
    BotWeight #=< 3,

    Energy #= 2*TopWeight + 1*BotWeight,    % Top shelf at double height

    minimize(labeling(Vars), Energy).       % find a minimal solution
    % labeling(Vars).                       % alternatively, find all solutions
:-lib(ic)。
:-lib(分支和绑定)。
求解(变量、能量):-
Vars=[TopSmall、TopLarge、BotSmall、BotLarge],
TopSmall::0..3%,顶部有多少个小盒子
BotSmall::0..3%,底部有多少个小盒子
TopLarge::0..1%,顶部有多少个大箱子
BOTLAGE::0..1%,底部有多少个大箱子
TopSmall+BotSmall#=3%,小盒子总数的百分比
TopLarge+BotLarge#=1%,大箱子总数的百分比
顶重#=顶小*1+顶大*2%,顶部总重量百分比
BotWeight#=BotSmall*1+BotLarge*2%,底部合计百分比
顶重#=小于3%,货架容量百分比
体重#=小于3,
能量#=2*最高重量+1*最低重量,%2倍高度的顶部搁板
最小化(标签(VAR)、能量)。%求最小解
%标签(Vars)。%或者,找到所有的解决方案