Cplex 中的单词生成

Word generation in Cplex

我对 CPlex 和约束编程还很陌生,我似乎不知道如何解决这个问题。 给定一个目标k和一个词长n,找到一组k个长度为n。 DNA 单词是字母表 {A,C,G,T} 上的一个字符串,它满足以下限制:

我尝试按照 Vellino 示例进行操作,但我似乎想不出一种方法来对最大化进行建模 objective。 你能帮我开始这个小项目吗?我对 "subject to" 块之外的代码特别感兴趣。

谢谢!

你可以从

开始
using CP;

int n=5;
range letters=1..n;
int k=5; // words
range words=1..k;
int d=3;

dvar int x[words][letters] in 0..3; // ACGT

subject to
{
forall(ordered i,j in words) d<=sum(k in letters) (x[i][k]!=x[j][k]);

forall(i in words) 
    count(all(j in letters)x[i][j],1)+
    count(all(j in letters)x[i][j],2)>=n/2;

forall(ordered i,j in words) d<=sum(k in letters) (x[i][k]!=(3-x[j][k]));
}

execute
{

function letterDisplay(n)
{
if (n==0) return "A";
if (n==1) return "C";
if (n==2) return "G";
if (n==3) return "T";
fail();

}


for(var w in words)
{
for(l in letters) write(letterDisplay(x[w][l]));
writeln();
}

}