私は次のコードを持っています:
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回の反復の後でも停止せず、意図したとおりに機能していないと私は考えています.