mathematica
发表于 2010-8-22 14:27:29
然后把上面代码的第25行改为"num01>158496.5;"(注意:需要以英文的分号结尾,绝对不能是中文的分号.
求出来的解是
Variable Value Reduced Cost
NUM01 216973.0 0.000000
NUM02 236204.0 0.000000
NUM03 453177.0 0.000000
mathematica
发表于 2010-8-22 14:28:49
然后把上面代码的第25行改为"num01>216973.5;"(注意:需要以英文的分号结尾,绝对不能是中文的分号.
求出来的解是
Variable Value Reduced Cost
NUM01 287694.0 0.000000
NUM02 247205.0 0.000000
NUM03 534899.0 0.000000
mathematica
发表于 2010-8-22 14:30:05
然后把上面代码的第25行改为"num01>287694.5;"(注意:需要以英文的分号结尾,绝对不能是中文的分号.
求出来的解是
Variable Value Reduced Cost
NUM01 325971.0 0.000000
NUM02 315306.0 0.000000
NUM03 641277.0 0.000000
mathematica
发表于 2010-8-22 14:31:18
然后把上面代码的第25行改为"num01>325971.5;"(注意:需要以英文的分号结尾,绝对不能是中文的分号.
求出来的解是
Variable Value Reduced Cost
NUM01 371482.0 0.000000
NUM02 321306.0 0.000000
NUM03 692788.0 0.000000
mathematica
发表于 2010-8-22 14:32:24
然后把上面代码的第25行改为"num01>371482.5;"(注意:需要以英文的分号结尾,绝对不能是中文的分号.
求出来的解是
Variable Value Reduced Cost
NUM01 386592.0 0.000000
NUM02 326307.0 0.000000
NUM03 712899.0 0.000000
mathematica
发表于 2010-8-22 14:39:23
然后把上面代码的第25行改为"num01>386592.5;"(注意:需要以英文的分号结尾,绝对不能是中文的分号.
这回lingo11.0告诉你"no feasible solution",于是数字num01只存在6种情况,你可以用同样的办法确定num02,由于num03是num01与num02的和,所以只需要再确定一下num02,当然lingo的长处是求解最优化方面的问题,在这个题目上,用lingo求解并非它所擅长的..如果有一种语言能够像c++那样提供置换的话,那么也能够很快地求解出来.
如果你的C++很厉害的话,可以试着用c++求解下面的问题:
钢管下料方案 http://zhidao.baidu.com/question/158299137.html
这个问题没有答案,至少没有人提供c++方面的答案,你可以试一试,这个题目用lingo是很容易求解的.
wayne
发表于 2010-8-22 15:09:31
46# mathematica
不错,呵呵,是6个 ,我还可以吧,没怎么刁难你,
在这个题目上,用lingo求解并非它所擅长的
知道就好,我记得我最初改动了一个地方,就一下子打印出一堆的可行解,都滚屏了很长时间,可惜忘了存了,我要是把那个拿出来,你未必能坚持的走下来滴,:lol 。
wayne
发表于 2010-8-22 15:17:42
比如,这个,SIRLEE+URCOOL= VIOLET(李先生,你是很酷的紫罗兰),就有28组解
mathematica
发表于 2012-4-26 10:47:10
/*此程序使用pari/gp运行*/
/*程序编制时间:2012年4月26日10:22:23*/
/*在pari/gp中,如果输入O=0(大写字母O不能被赋值成数字0)这样的赋值语句,将出现错误,至于
为什么O不能成为变量,不知道为什么,这是个很奇怪的状况*/
/*大括号似乎是不可少的*/
{
for(x=1,10!,/*给出所有可能的排列,对每一个排列一一穷举*/
/*每次给出一个排列*/
z=numtoperm(10,x);
/*形成10个字母,如果数字是10,则变成0*/
c=z;if(c==10,c=0);
l=z;if(l==10,l=0);
o=z;if(o==10,o=0);
v=z;if(v==10,v=0);
e=z;if(e==10,e=0);
r=z;if(r==10,r=0);
u=z;if(u==10,u=0);
s=z;if(s==10,s=0);
i=z;if(i==10,i=0);
t=z;if(t==10,t=0);
/*形成三个数*/
clover=c*10^5+l*10^4+o*10^3+v*10^2+e*10^1+r;
crocus=c*10^5+r*10^4+o*10^3+c*10^2+u*10^1+s;
violet=v*10^5+i*10^4+o*10^3+l*10^2+e*10^1+t;
\\计算clover+crocus与violet的比较,其中clover+crocus左右两边的括号不可以缺少,
\\其中原因不知道为什么;
\\如果两个值相等,则输出结果,如果不等则不执行操作
if((clover+crocus)==violet,
print()
)
)
}
mathematica
发表于 2012-4-26 10:49:31
上面是程序的代码:
附近是代码文件\代码截图\结果截图