2017-03-29 9 views
0

私のルールで使用されている事実は、他のオブジェクトを集約しています。私が解決したい問題は、最小値と最大値の連鎖です。平均iqが最も高く、年齢が最も低い、そして...、そして...様々な他の基準を有する人々のグループ(これらは事実である)を見つける。大きなルールから読みやすいルールを引き出す方法を教えてください

以下のルールを見てください。もし私が2〜3以上の基準を持っていれば、LHSは読めなくなります。

どうすればよいですか?

ルール結果

にPeopletGroupを追加

その後、

//

$options: PeopleGroup(

     $averageIq : getAverageIg(this), 

     $averagAge : getAverageAge(this), 

) 

not ( PeopleGroup(getAverageIg(this) > $averageIq) 

     or PeopleGroup(getAverageIg(this) == $averageIq, getAverageAge(this) < $averagAge ) 

) "最高の平均IQとthetグループと最低の平均年齢を探します"

終了。

おかげ

答えて

0

はあなたの問題の説明があまりにも曖昧ですが、私はとにかくあなたが持っているオプションのカップルを説明します。

まず、「ベストグループ」を探している場合、PeopleGroupComparable<PeopleGroup>を実装するように、PeopleGroup.compareTo(PeopleGroup pg)というメソッドを定義する必要があります。最良のグループを見つけるルールは単純でなければなりません。 (もちろん、2つのPeopleGroupオブジェクトを比較する任意の数の静的メソッドを書くこともできます。いずれの場合でも、ルールは非常にシンプルになります。

rule "best group" 
when 
    $pg1: PeopleGroup() 
    not PeopleGroup(this.compareTo($pg1) > 0) 
then 
    // $pg1 is best PeopleGroup 
end 

もう1つの方法は、不適格なファクトを取り消したり、マーキングしたりしてファクトをフィルタリングすることです。したがって、最初のパスでは、最大IQを持たないグループはすべて退却します。次に、あなたは最低年齢を持たない残りのグループを失格とします。順序を制御するために、アジェンダグループまたは顕著性または追加ロジックを使用してルールを注文する必要があります。しかし、個々のルールは単純になります。

+0

まず、お返事ありがとうございます!私は2番目のアプローチを理解していますが、最初のアプローチは実際には得られません。上記のルールに基づいて、この最初のアプローチでルールはどのように見えますか? –

+0

compareToを使用して記述できるルールを追加しました。 – laune

関連する問題