【发布时间】:2013-03-19 00:31:14
【问题描述】:
我有以下代码:
while rounds<=5
fprintf('Rolling the dice...\n');
roll=randi(6,1,5);
roll=sort(roll);
fprintf('You rolled:');
disp(roll);
rollCount=rollCount+1;
for x=1:2:17
y=all(ismember(roll,rule{x}))
disp(ismember(roll,rule{x}));
z=all(ismember(rule{x},roll))
disp(ismember(rule{x},roll));
rounds=rounds+1;
end
end
它应该做的是将 roll 数组与 rule{x} 数组进行比较,并告诉我它是否匹配。如果不匹配,它应该告诉我滚动数组的哪些索引与规则数组不匹配。但是它不能正常工作。假设示例滚动是 [2 2 3 5 5],规则 {x} 是 [1 2 3 4 5]。
我想要的输出是一个具有 [0 1 1 0 1] 的数组,但我从 y 中得到的是 [1 1 1 1 1] 而对于 z 是 [0 1 1 0 1]。这似乎是正确的输出,但如果我们将规则更改为 [5 5 5 5 5] 我会得到 [1 1 1 1 1] 这是不正确的。
这是针对我正在编写的 Yahtzee 游戏。掷骰子是掷骰子,规则是我要匹配的,所以我可以看到我需要重新掷骰子才能匹配。
编辑: 使用来自 dspyz 的代码,我编写了函数:
function[scoreCode]=ForwardChaining(rollFunc,ruleFunc)
temp=histc(rollFunc,1:6);
for x=1:2:11
if (ruleFunc{x}<=temp)
scoreCode=ruleFunc{x+1};
break;
else scoreCode=0;
end
end
主函数将其称为:
c= ForwardChaining(roll,rule);
if c == 12;
break;
end
但出于某种原因,即使经过 100,000 次迭代,它也不会停止,我认为它没有按预期工作。
【问题讨论】:
-
查看this帖子
-
你的 ruleFunc 数组中有什么?
-
即具有直方图规则的数字数组。我认为它实际上工作正常。只是休息;当我想要它时,它似乎没有破裂。我测试了很多次,最终让它工作了。关于如何重新计算不符合规则的数字。
-
ForwardChainingRule 返回 scoreCode,它是 ruleFunc 的一个元素。但是如果 ruleFunc 是一个直方图列表,那么它们都不是数字 12
-
ruleFunc 每隔一行就有上一行给出的分数。所以第一行是 5 0 0 0 0 0 0,第二行是 12。12 被传递回原始函数,被解释为掷骰子的分数。虽然这里的这个例子真的很粗糙。我正在一步一步地慢慢开发附加功能,但要确保程序作为一个整体运行,所以如果我没有完成所有工作,我有一些东西要上交。