1

我有这个问题:

在字母表 W = { A,C,G,T } 上找到一组长度为 8 的字符串(单词),具有以下属性:

  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}

现在,对于第二点,我不知道。也许我开始的方式是错误的。我不知道是否可以在解决方案之间创建约束。

我用的是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 回答