1

私はこの問題を抱えています:

次のプロパティを持つアルファベット W = { A,C,G,T } の長さ 8 の文字列 (単語) の集合 S を見つけます。

  1. S の各単語には、次の 4 つの記号があります。{ C,G }

  2. S の異なる単語の各ペアは、少なくとも 4 つの位置が異なります。

私は最初のポイントをしました。8 つの変数は 1 と 4 の間の値を取り、1 と 2 は 4 つの場所に出現する必要があると言いました。

V = {x1, x2, x3, x4, x5, x6, x7, x8}
D = {1, 2, 3, 4}
C = {1 and 2 must appear in 4 places; I uses `ICF.among()` function}

さて、2点目ですが、私にはわかりません。多分それは私の始め方が間違っている。ソリューション間に制約を作成できるかどうかはわかりません。

私はchoco3を使用しました。コードは次のとおりです。

Solver s = new Solver("My pb");
IntVar[] var = new IntVar[8];

for(int i=0;i<8;i++)


var[i]=VariableFactory.bounded("Letter"+i, 1, 4, s);

IntVar o = VariableFactory.bounded("Occurence", 4, 4, s);
int[] ind = {1,2};
int[] ind1={3,4};

s.post(ICF.among(o, var, ind));
s.findSolution();   
do{
    for(int i=0;i<8;i++){
        System.out.print(s.getVar(i)+" ");
    }
    System.out.println();
}while(s.nextSolution());
4

1 に答える 1

0

検索中に制約を追加できます。バックトラック時にそれらを削除するかどうかを指定することもできます。

于 2016-03-03T22:27:30.797 に答える