资源

语法示例(omods01)

/***************************************************************//*                                                             *//*S A S S A M P L E L I B R A R Y*//*                                                             *//*姓名:omods01*//*标题:语法示例(omods01)*//*产品:或*//*系统:所有*//*关键字:或*//*程序:OPTMODEL*//*数据:*//*                                                             *//*支持:更新:*//*参考编号:*//*MISC:来自*//*数学规划的OPTMODEL章节*//*                                                             *//***************************************************************//*****************************************************************                                                              **声明声明**                                                              *****************************************************************//*数字、字符串和设置参数*/过程操作模型;在1..2}初始化i**2中输入{i;a[1]=2;输入[*]=;退出;/*NUMBER、STRING和SET参数:初始化数组*/过程操作模型;数字a{1..3}=[547];数字b{1..3}初始[5 4 7];输入[*]=;b[1]=1;输入b[*]=;退出;/*问题声明:添加模型组件*/过程操作模型;问题1;使用问题1;var x>=0;/*包含在问题1中*/最小z1=(x-1)**2;/*包含在问题1中*/展开;/*prob1包含x,z1*/prob1中的prob2问题;使用问题prob2;/*包括x、z1*/最小z2=(x-2)**2;/*将prob2目标重置为z2*/展开;/*prob2包含x、z2*/使用问题开始;/*不要修改prob2*/最小z3=(x-3)**2;问题prob3包括xz3;使用问题问题3;展开;/*prob3包含x,z3*/退出;/*****************************************************************                                                              **编程语句**                                                              *****************************************************************//*CALL语句:更新OPTMODEL参数*/过程操作模型;1..4}初始i中的编号a{i;种子数init-1;call ranperm(种子,a[1],a[2],a[3],a[4]);打印a;退出;/*CLOSEFILE语句*/文件名问候“hello.txt”;过程操作模型;文件问候;输入“Hi!”;密室问候;退出;/*COFOR语句:简单循环*/proc optmodel打印级别=0;变量x{1..6}>=0;最小化z=1.6}x[j]中的和{j;cona1:x[1]+x[2]+x[3]<=4;cona2:x[4]+x[5]+x[6]<=6;cona3:x[1]+x[4]>=5;cona4:x[2]+x[5]>=2;cona5:x[3]+x[6]>=3;cofor{iin3..5}do;固定x[1]=i;解决;输入i=x[1]=解决方案状态=;结束;退出;/*蒙特卡洛MINLP投资组合优化*//*资产预期回报*/数据手段;投入回报;数据线;0.0000657630.0026041070.0007536110.000082178-.0003802500.0003990030.0024212620.0024124290.0007733940.0004030470.001361435;/*资产收益协方差*/数据covdata;输入cov资产1资产2;数据线;零点零零一三五三七五一一一零点零零零四六八五七八一二零点零零一二八零九九零一三-.000032003 1 4零点零零零七三一八九零一五零点零零零六六零一一三一六零点零零零六四一一七六一七零点零零零四六六七三四一八零点零零零六八三九二七一九零点零零零六五八七八九一一零零点零零零六零六六一六一一一零点零零零三零七零三五二二零点零零零五三四九五九二三-.000006434 2 4零点零零零三一零三六二二五零点零零零三零四四零八二六零点零零零三四八一四八二七零点零零零二四三五六一二八零点零零零三一一九八九二九零点零零零三零一二二九二一零零点零零零二八二五零零二一一零点零零一四四八七五九三三-.000031943 3 4零点零零零七七二零零八三五零点零零零七四五四四一三六零点零零零七八二七四四三七零点零零零五五四四五三三八零点零零零七六二八三八三九零点零零零七四五五五九三一零零点零零零七一九五九九三一一零点零零零零二六三一四四四-.000027629 4 5-.000025069 4 6-000016775 4 7-.000016202 4 8-.000026060 4 9-.000026031 4 10-.000019917 4 11零点零零零五一零二三五五五零点零零零四六三五八零五六零点零零零四七一五七零五七零点零零零三四六五零七五八零点零零零四七九八一零五九零点零零零四六三五二六五一零零点零零零四二四八八九五一一零点零零零四五五九五九六六零点零零零四七一九二四六七零点零零零三三二六九七六八零点零零零四六二一五九六九零点零零零四五五零八零六一零零点零零零四二一零五九六一一零点零零零五七二一七一七七零点零零零三七一一五三七八零点零零零四七三五三二七九零点零零零四七零六八六七一零零点零零零四四九四二八七一一零点零零零三一六四八三八八零点零零零三三七二九五八九零点零零零三三一三一二八一零零点零零零三二八四零四八一一零点零零零四八二零三八九九零点零零零四六二零二四九一零零点零零零四二九八七五九一一零点零零零四五六零九七一零一零零点零零零四二零六一三一零一一零点零零零四六零零五零一一一一;/*COFOR语句:使用固定数量的试验进行优化*/proc optmodel打印级别=0;/*资产和相关参数*/设置资产;num返回{资产};num cov{资产,资产}初始化0;读取数据意味着进入资产=[_n_]return;将数据covdata读入[asset1 asset2]cov cov[asset2,asset1]=cov;num风险限额init 0.00025;num minThreshold init 0.1;num-numTrials=10;/*随机试验次数*/设置TRIALS=1.numTrials;/*固定资产集的声明NLP问题*/设置ASSETS_THIS;var资产属性变量{资产}>=最小阈值<=1;max ExpectedReturn=资产中的总和{i}return[i]*资产属性变量[i];con风险约束:ASSETS_THIS中的总和{i,ASSETS_HIS}中的总和jcov[i,j]*资产比例变量[i]*资产比率变量[j]<=风险限额;con总投资组合:sum{资产中的资产}资产属性变量[asset]=1;/*跟踪最佳解决方案的参数*/num infinity=常量(“BIG”);num最佳目标init-无穷大;设置INCUMBENT;/*反复试验*/num开始{TRIALS};num完成{试验};num overall_start;overall_start=时间();调用流管理器(1);cofor{试验中的试验}do;start[trial]=time()-总体启动;放置;put试用=;ASSETS_THIS={资产中的i:rand(“统一”)<0.5};放置ASSETS_THIS=;对于资产diff ASSETS_THIS}中的{i修正AssetOpVar[i]=0;用NLP/logfreq=0求解;放置解决方案状态=;如果_solution_status_ne为“不可行”,则执行;如果best_objective<ExpectedReturn,则执行;best_objective=预期回报;INCUMBENT=资产_本;结束;结束;finish[trial]=time()-总体启动;结束;put best_objective=INCUMBENT=;从[trial]e_start=starte_finish=finish创建数据甘特数据;退出;proc-gantt数据=ganttdata;id试验;chart/compress nolegend nojobnum mindate=0顶部高度=1.8;运行;/*COFOR语句:使用LEAVE进行有时间限制的优化*/proc optmodel打印级别=0;设置资产;num返回{资产};num cov{资产,资产}初始化0;读取数据意味着进入资产=[_n_]return;将数据covdata读入[asset1 asset2]cov cov[asset2,asset1]=cov;num风险限额init 0.00025;num minThreshold init 0.1;/*固定资产集的声明NLP问题*/设置ASSETS_THIS;var资产属性变量{资产}>=最小阈值<=1;max ExpectedReturn=资产中的总和{i}return[i]*资产属性变量[i];con风险约束:ASSETS_THIS中的总和{i,ASSETS_HIS}中的总和jcov[i,j]*资产比例变量[i]*资产比率变量[j]<=风险限额;con总投资组合:sum{资产中的资产}资产属性变量[asset]=1;num infinity=常量(“BIG”);num最佳目标init-无穷大;设置INCUMBENT;/*运行30秒*/num last_time;last_time=时间()+30;num n_trials初始化0;调用streaminit(1);cofor{在1..1e9}do中试验;放置;put试用=;资产_THIS={i在资产中:rand(“统一”)<0.5};放置ASSETS_THIS=;对于资产diff ASSETS_THIS}中的{i,修复资产属性变量[i]=0;用NLP/logfreq=0求解;放置解决方案状态=;如果_solution_status_ne为“不可行”,则执行;如果best_objective<ExpectedReturn,则执行;best_objective=预期回报;INCUMBENT=资产_本;结束;结束;n次试验=n次试验+1;如果time()>=last_time,则离开;结束;放置n_trials=;put best_objective=INCUMBENT=;退出;/*CREATE DATA语句:参数输出*/过程操作模型;数量m=7,n=5;从mn创建数据示例;退出;/*CREATE DATA语句:表达式的输出*/过程操作模型;数量m=7,n=5;根据比率=(m/n)创建数据示例;退出;/*CREATE DATA语句:使用COL表达式*/过程操作模型;数量m=7,n=5;从col(“s”|n)=(m+n)创建数据示例;退出;/*CREATE DATA语句:列*/过程操作模型;设置<string>alph={'a','b','c'};var x{1..3,alph}初始值2;根据[i]=(1..3)创建数据示例{j在alph}<col(“x”|j)=x[i,j]>中;退出;/*CREATE DATA语句:创建单个观察*/过程操作模型;数量m=7,n=5;从mn比率=(m/n)列(“s”|n)=(m+n)创建数据示例;退出;程序打印;运行;/*CREATE DATA语句:列选项*/过程操作模型;numsq{i..10}=i*i;从[i/format=hex2./length=3]sq/format=6.2创建数据方块;退出;程序打印;运行;/*CREATE DATA语句:键列*/过程操作模型;数字m{1..5,1..3}=[[1 1]1[4 1]1];集合ISET=1..2}i**2中的{i集合;创建数据示例从ISET中的[ij]={i,{1,2}}m;退出;proc打印数据=示例noobs;运行;/*CREATE DATA语句:未指定的密钥集*/过程操作模型;数字x{1..2}init 2;变量y{2..3}初始值3;从[keycol]xy创建数据exdata;退出;程序打印;运行;/*CREATE DATA语句:重复列*/过程操作模型;数量m=3;/*行数/观察数*/数量n=4;/*中的列数*/num a{i在1..m中,j在1..n}=i*j;/*计算a*/num b{i在1..m}中=i**2;/*计算b*/集合<num>子集=2..m;/*用于省略第一行*/创建数据输出从[i]=子集{j到1..n}<col(“a”|j)=a[i,j]>b;退出;/*DO语句:DO语句,迭代*/过程操作模型;数字i;do i=1,3,5;放置i;结束;退出;/*DO语句:在范围上迭代*/过程操作模型;数字i;做i=1到5乘2;put’DO循环分配的i的值=‘i;i=i**2;put’循环体中赋值i的值=’i;结束;退出;/*DO语句:在集合上迭代*/过程操作模型;集合s={1,3,5};数字i;do i=s;放置i;结束;退出;/*DO语句:使用WHILE子句迭代*/过程操作模型;集合s={1,2,3,4,5};数字i;do i=s,而(i NE 4);放置i;结束;退出;/*DO UNTIL语句*/过程操作模型;数字i;i=1;直到(i=3);放置i;i=i+1;结束;退出;/*DO WHILE语句*/过程操作模型;数字i;i=1;do while(i<3);放置i;i=i+1;结束;退出;/*DROP语句*/过程操作模型;变量x{1..10};conc1:x[1]+x[2]<=3;condisp{i.in1..9}:x[i+1]>=x[i]+0.1;展开/con;下降c1;/*删除c1约束*/展开/con;删除显示[5];/*掉落just disp[5]*/展开/con;删除disp;/*删除所有disp约束*/展开/con;恢复c1 disp;下降c1 disp[5];展开/con;退出;/*EXPAND声明*/过程操作模型;数量n=2;变量x{1..n};最小z1=1,.n}(x[i]-i)**2中的和{i;max z2=1,.n}(i-x[i])**3中的和{i;conc{i在1..n}:x[i]>=0;固定x[2]=3;扩展;退出;/*EXPAND语句:SOLVE选项*/过程操作模型;数量n=2;变量x{1..n};最小z1=和{i在1..n}(x[i]-i)**2;max z2=1,.n}(i-x[i])**3中的和{i;conc{i在1..n}:x[i]>=0;固定x[2]=3;展开/求解;退出;/*FILE语句:多个文件*/过程操作模型;文件“file.txt”lrecl=80;/*打开文件.txt*/put“这是file.txt的第1行。”;文件打印;/*选择列表*/放置“这将转到列表。”;文件“file.txt”;/*重新选择文件.txt*/put“这是file.txt的第2行。”;closefile“file.txt”;/*关闭文件.txt*/文件日志;/*选择SAS日志*/把“这个放到日志上。”;/*使用表达式打开和写入文件集合*/索氏索;数字i;数量l=40;do i=1到3;ofile=('file'|i||'.txt');文件(ofile)lrecl=(l*i);put('This goes to'of the ile);关闭文件(文件);结束;退出;/*FILE语句:逻辑文件名*/过程操作模型;/*为file.txt指定逻辑名称*//*请参阅中的FILENAME语句*//*SAS声明:参考*/filename myfile“file.txt”mod;文件myfile;put“这是file.txt的第3行。”;关闭文件myfile;文件myfile;放入“这是文件.txt的第4行。”;关闭文件myfile;退出;/*FIX语句*/过程操作模型;变量x,y;数量a=2;固定x y=a+1;扩张;退出;过程操作模型;变量x{1..10};固定x=0;固定x[10]=1;扩张;取消固定;/*FOR语句*/过程操作模型;对于1..2中的{i,{'a','b'}}中的j将i=j=;退出;过程操作模型;变量x{1..10};对于1..10}中的{ix[i]=拉努尼(-1);打印x;退出;/*LEAVE语句*/过程操作模型;数字i,j;do i=1..5;do j=1..4;如果i>=3且j=2,则离开;结束;打印i j;结束;退出;/*PRINT语句*/过程操作模型;数量x=4.3;变量y{j in 1..4}初始化j*3.68;打印y;/*标识符表达式*/打印(x*.265)玩偶6.2;/*(表达式)[格式]*/在2..4}y中打印{i;/*{index-set}标识符表达式*/在1..3}中打印{i(i+i*.2345692)best7。;/*{索引集}(表达式)[格式]*/打印“第1行”;/*字符串*/退出;过程操作模型;num a{i in 1..3}=i*i;编号b{i在3..5}中=4*i;打印b;退出;/*PRINT语句:矩阵输出*/过程操作模型;在1..6中打印{i,在i..6}中打印j(i*10+j);退出;/*PRINT语句:PMATRIX=选项*/过程操作模型;1..6中的num a{i,即i}=i;numb{i在1..3中,j在1..3}中=i*j;打印a;打印b;重置选项pmatrix=3;打印a;重置选项pmatrix=0.5;打印b;退出;/*READ DATA语句:键列*/数据invdata;输入项$invcount;数据线;表100沙发250椅子80;过程操作模型;设置<string>Items;数字invcount{Items};将数据invdata读入Items=[item]invcount;打印库存;退出;/*READ DATA语句:列*/数据exdata;输入column1 column2;数据线;1 2个3 4;过程操作模型;编号n init 2;设置<num>indx;数字p{indx},q{indx{;将数据exdata读入indx=[_N_]p=column1 q=col(“column”||N);打印pq;/*READ DATA语句:重复列*/数据dmnd;输入loc$day1 day2 day3 day4 day5;数据线;东部1.1 2.3 1.3 3.6 4.7西部7.0 2.1 6.1 5.8 3.2;过程操作模型;设置DOW=1..5;/*星期几,1=星期一,5=星期五*/设置LOCS;/*位置*/数字需求{LOCS,DOW};读取数据dmnd进入LOCS=[loc]{DOW}<demand[loc,d]=col(“day”||d)>中的d;印刷需求;退出;/*RESTORE语句*/过程操作模型;变量x{1..4},y{1..4{;conc{i.in1..4}:x[i]+y[i]<=1;滴c;扩张;恢复c[1];扩张;恢复c[2]c[3];扩张;恢复c;扩张;退出;/*SAVE MPS语句*/过程操作模型;var x>=0,y>=0;conc:x>=y;con bx:x≤2;con依据:y≤1;最小obj=0.5*x-y;保存mps MPSData;退出;proc optlp data=MPSData pout=PrimalOut dout=DualOut;运行;/*SAVE QPS语句*/过程操作模型;变量x{1..2}>=0;最小z=2*x[1]+3*x[2]+x[1]**2+10*x[2]+2.5*x[1]*x[2];conc1:x[1]-x[2]<=1;conc2:x[1]+2*x[2]>=100;保存qps QPSData;退出;proc optqp data=QPSData-pout=PrimalOut-dout=DualOut;运行;/*STOP语句*/过程操作模型;数字i,j;do i=1..5;do j=1..4;如果i=3和j=2,则停止;结束;结束;打印i j;退出;/*提交声明*/过程操作模型;设置节点;num优先级{NODES};/*设置优先级数据*/调用streaminit(12345);节点=1..26}子串中的{i集('ABCDEFGHIJKLMNOPQRSTUVWXYZ',i,1);对于{id in NODES}优先级[id]=100*rand('UNIFORM');/*按优先级降序对节点排序*/从[id]优先级创建数据temppri;提交;进程排序;通过降低优先级;运行;endsubmit;/*按优先级加载节点*/str nodesByPri{i.卡(节点)}中的i;将数据temppri读入[_n_]节点ByPri=id;/*使用排序列表*/打印1..卡(节点)}优先级中的节点ByPri{i[nodesByPri[i]];退出;/*SUBMIT语句:传递宏变量值*/过程操作模型;对于1..5}do中的{i;提交a=i;%a的认沽价值为&a。。;endsubmit;结束;退出;/*SUBMIT语句错误处理*/过程操作模型;num成功,syscc;submit/OK=成功退出syscc;数据示例;未找到集合;j=i*i;运行;endsubmit;打印成功syscc;退出;/*UNFIX声明*/过程操作模型;变量x{1..3};修复x;/*将整个数组修复为0*/扩张;取消x[1];/*x[1]现在可以再次改变*/扩展;unfix x[2]=2;/*给x[2]一个初始值2*//*现在可以改变*/扩张;打印x;取消x;/*所有x指数现在都可以改变*/扩张;退出;过程操作模型;变量x{1..3}初始化2;数量a=1;固定x;unfix x[1]x[2]=a+3;扩张;打印x;退出;