资源

蛋白质比较(mpex29)

/***************************************************************//*                                                             *//*S A S S A M P L E L I B R A R Y*//*                                                             *//*名称:mpex29*//*标题:蛋白质比较(mpex29)*//*产品:或*//*系统:所有*//*按键:或*//*过程:OPTMODEL*//*数据:*//*                                                             *//*支持:更新:*//*参考:*//*MISC:数学编程示例29*//*示例手册*//*                                                             *//***************************************************************/数据边缘_data1;输入ij;数据线;1 22 93 43 55 66 77 98 9;数据边缘_data2;输入ij;数据线;1 42 34 64 75 66 87 87 109 1010 11;过程操作模型;设置<num,num>边{1..2};将数据edge_data1读入EDGES[1]=[i j];将数据edge_data2读入EDGES[2]=[i j];在EDGES[g]}{i,j}的1..2}init并集{<i,j>中设置节点{g;对于1..2}节点中的{g=1..卡(节点[g])节点间[g];设置IJ=节点[1]交叉节点[2];在IJ中设置EDGE_PAIRS={i,j>,在IJ:i<k和j ne l中设置(EDGES[1]中的<i,k>)和(EDGES[2]中的<j,l>)};/*如果节点[1]中的节点i分配给节点[2]中的节点j,则分配[i,j]=1*/var分配{IJ}二进制;/*如果EDGES[1]中的边<i,k>,IsCorrespondingEdge[i,j,k,l]=1对应于EDGES[2]中的边<j,l>*/var IsCorrespondingEdge{EDGE_PAIRS}二进制;/*最大化相应边的数量*/最大对应边数=EDGE_PAIRS}IsCorrespondingEdge[i,j,k,l]中的和{;/*将每个i分配给最多一个j*/节点[1]中的con Assign_i{i:IJ}中的和{<(i),j>赋值[i,j]<=1;/*每个j最多分配一个i*/节点[2]中的con Assign_j{j:IJ}中的和{i,(j)>赋值[i,j]<=1;/*不允许交叉边*/IJ中的con NoCrossover{<i,j>,IJ中<k,l>:i<k and j>l}:赋值[i,j]+赋值[k,l]<=1;/*如果IsCorrelatingEdge[i,j,k,l]=1,则赋值[i,j]=赋值[k,l]=1*/EDGE_PAIRS}中的con对应1{<i,j,k,l>:Is对应边[i,j,k,l]<=赋值[i,j];EDGE_PAIRS}中的con对应2{<i,j,k,l>:IsCorrespondingEdge[i,j,k,l]<=赋值[k,1];解决;文件打印;对于IJ中的{<i,j>:赋值[i,j].sol>0.5}put(图1中的'Node'|i||'对应于图2中的节点'|j||');对于EDGE_PAIRS中的{<i,j,k,l>:IsCorrespondingEdge[i,j、k,l].sol>0.5}do;图1中的put('Edge('|i||','|k||')对应于')@@;put('edge('j|','l|')in graph 2.');结束;退出;