资源

逻辑设计(mpex12)

/***************************************************************//*                                                             *//*S A S S A M P L E L I B R A R Y*//*                                                             *//*名称:mpex12*//*标题:逻辑设计(mpex12)*//*产品:或*//*系统:所有*//*程序:OPTMODEL*//*数据:*//*                                                             *//*支持:更新:*//*参考:*//*MISC:数学编程示例12*//*示例手册*//*                                                             *//***************************************************************/数据arc_data;输入ij;数据线;4 25 26 37 32 13 1;/*真值表(用于XOR)*/数据真实数据;输入A B输出;数据线;0 0 00 1 11 0 11 1 0;过程操作模型;设置<num,num>ARCS;将数据arc_data读入ARCS=[i j];在ARCS}{i,j}中设置GATES=union{i,j>;var UseGate{GATES}二进制;min NumGatesUsed=总和{GATES}UseGate[gate];var AssignAGate{GATES}二进制;var AssignBGate{GATES}二进制;con AssignAGate_def{GATES}中的门:AssignAGate[gate]<=UseGate[gate';con AssignBGate_def{GATES}中的门:AssignBGate[gate]<=UseGate[gate';con At_most_two_input{GATES}中的门:ARCS}UseGate[pred]中的sum{<pred,(gate)>+AssignAGate[gate]+AssignBGate[gates]<=2;设置ROWS;num输入A{ROWS};num输入B{ROWS};num目标输出{ROWS};将数据true_data读入ROWS=[_N_]inputA=A inputB=B target_output=output;var输出{GATES,ROWS}二进制;对于{ROWS}中的行,修复输出[1,row]=target_Output[row];con Output_link{GATES中的门,ROWS中的行}:输出[gate,row]<=UseGate[gate];/*如果inputA[row]=1且AssignAGate[gate]=1,则输出[门,行]=0*/con NOR_def1{GATES中的门,ROWS中的行}:inputA[row]*AssignAGate[gate]<=1-输出[gate,row];/*如果inputB[row]=1且AssignBGate[gate]=1,则输出[门,行]=0*/con NOR_def2{GATES中的门,ROWS中的行}:inputB[row]*AssignBGate[gate]<=1-输出[gate,row];/*如果输出[pred,row]=1,则输出[gate,row]=0*/con NOR_def3{ARCS中的<pred,gate>,ROWS}中的行:输出[pred,row]<=1-输出[gate,row];/*如果UseGate[gate]=1且Output[gate,row]=0,则(inputA[row]=1,AssignAGate[gate]=1)或(inputB[行]=1,AssignBGate[门]=1)或ARCS}中的和{<pred,(门)>输出[pred,row]>=1*/con NOR_def4{GATES中的门,ROWS中的行}:inputA[row]*AssignAGate[gate]+inputB[row]*AssignBGate[gate]+ARCS}中的sum{<pred,(gate)>输出[pred,row]>=使用门[门]-输出[门,行];解决;打印UseGate AssignAGate AssignBGate;打印输出;从[gate]UseGate AssignAGate AssignBGate创建数据sol_data1;从[gate row]Output创建数据sol_data2;退出;