300 likes | 680 Views
Optimizer 优化器入门. 林森科技 2007.6. 概述. 矩阵输入 输入和求解线性规划问题 混合整数规划 二次规划. 第 1 章 矩阵输入. 初始化 Xpress-Optimizer 优化器; 载入 MPS 格式或者 LP 格式的矩阵到优化器; 求解问题; 将问题的解写入文件。. 矩阵文件. 扩展 MPS 格式 扩展 LP 格式 这些文件可以通过其他一些工具产生,例如 Mosel 建模语言或者 BCL 库 Xpress-Optimizer 优化器可以读入这些文件. 实现. 初始化 Xpress-Optimizer 优化器
E N D
Optimizer优化器入门 林森科技 2007.6
概述 • 矩阵输入 • 输入和求解线性规划问题 • 混合整数规划 • 二次规划
第1章 矩阵输入 • 初始化Xpress-Optimizer优化器; • 载入MPS格式或者LP格式的矩阵到优化器; • 求解问题; • 将问题的解写入文件。
矩阵文件 • 扩展MPS格式 • 扩展LP格式 • 这些文件可以通过其他一些工具产生,例如Mosel建模语言或者BCL库 • Xpress-Optimizer优化器可以读入这些文件
实现 • 初始化Xpress-Optimizer优化器 XPRSinit(NULL); • 生成问题。 XPRScreateprob(&prob); • 读取矩阵文件。 XPRSreadprob(prob, "Folio", ""); • 求解问题 XPRSmaxim(prob, ""); • 写入文件 XPRSwriteprtsol(prob, "Folio.prt", ""); • 释放求解器 XPRSdestroyprob(prob); XPRSfree();
编译和编程执行 • Window dos命令行: cl /MD /I D:\xpressmp\include D:\xpressmp\lib\xprb.lib foliomat.c • Window vc6.0: 将xprb_cpp.h, xprb.lib文件执行文件夹下面,并添加到工程 • Linux或者Solaris系统: cc -D_REENTRANT -I${XPRESSDIR}/include -L${XPRESSDIR}/lib foliomat -o foliolp -lxprb
第2章 输入和求解线性规划问题 • 将LP模型转化为矩阵形式; • 将LP问题输入Xpress-Optimizer优化器; • 求解和结果输出。
LP矩阵
LP矩阵表解释 • 列表示决策变量 • 行表示约束条件 • 将所有非零系数输入到表格
实现 • 定义行列 int ncol = 10; int nrow = 3; • 定义列数据 double obj[] = { 5, 17, 26, 12, 8, 9, 7, 6, 31, 21}; double lb[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; double ub[] = {0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3}; • 定义行数据 char rowtype[] = { ’L’,’G’,’E’}; double rhs[] = {1.0/3,0.5, 1}; • 定义矩阵系数 int colbeg[] = {0, 2, 5, 8, 11,12,13,14,15, 17, 19}; int rowidx[] = {1,2, 0,1,2, 0,1,2, 0,1,2, 2, 2, 2, 2, 0, 2, 0,2}; double matval[] = {1,1,1,1,1,1,1,1,1,1,1, 1, 1, 1, 1, 1,1, 1,1};
矩阵系数的另一种表示方法 int colbeg[] = {0, 2, 5, 8, 11,12,13,14,15, 17}; int nelem[] = {2, 3, 3, 3, 1, 1, 1, 1, 2, 2}; int rowidx[] = {1,2,0,1,2,0,1,2,0,1,2, 2, 2, 2, 2, 0,2, 0,2}; double matval[] = {1,1,1,1,1,1,1,1,1,1,1, 1, 1, 1, 1, 1,1, 1,1};
载入问题矩阵 XPRSloadlp(prob, "FolioLP", ncol, nrow, rowtype, rhs, NULL,obj, colbeg, nelem, rowidx, matval, lb, ub); • 求解问题 XPRSmaxim(prob,"");
编译和编程执行 • Window dos命令行: cl /MD /I D:\xpressmp\include D:\xpressmp\lib\xprb.lib foliolp.c • Window vc6.0: 将xprb_cpp.h, xprb.lib文件执行文件夹下面,并添加到工程 • Linux或者Solaris系统: cc -D_REENTRANT -I${XPRESSDIR}/include -L${XPRESSDIR}/lib foliolp.C -o foliolp -lxprb
第3章 混合整数规划 • 将MIP模型转换为矩阵格式; • 定义不同类型的离散变量; • 将不同MIP问题中不同类型的离散变量输入到Xpress-Optimizer优化器; • 求解MIP问题和输出解。
扩展问题描述 • 投资者不希望持有少量的股票。因此他提出了以下两个可能的约束条件: • 1. 限制投资组合中不同股票的支数。 • 2. 如果买进一种股票,它所占的资金至少占预算的10%即。
MIP 模型1:购买股票数有限 • 引入二值变量buy • 引入股票数小于MAXNUM约束条件 • 把新的二值变量buy与原变量frac相关联
矩阵表示
实现 • 矩阵miptype和矩阵mipcol中表示MIP的特殊信息 。 • 定义行列 int ncol = 20; int nrow = 14; int nmip = 10; • 定义列数据 double obj[]= { 5, 17, 26, 12, 8, 9, 7, 6, 31, 21,0,0,0,0,0,0,0,0,0,0}; double lb[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0}; double ub[] = {0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,1,1,1,1,1,1,1,1,1,1}; • 定义行数据 char rowtype[]= { ’L’,’G’,’E’,’L’,’L’,’L’,’L’,’L’,’L’,’L’,’L’,’L’,’L’,’L’}; double rhs[] = {1.0/3,0.5, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
定义矩阵系数 int colbeg[] = {0,3,7,11,15,17,19,21,23,26,29,31,33,35,37,39,41,43,45,47,49}; int rowidx[] = {1,2,4,0,1,2,5,0,1,2,6,0,1,2,7,2,8,2,9,2,10,2,11,0,2,12,0,2,13,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13}; double matval[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1};
定义整数变量 char miptype[] = {’B’,’B’,’B’,’B’,’B’,’B’,’B’,’B’,’B’,’B’}; int mipcol[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; • 载入问题矩阵 XPRSloadglobal(prob, "FolioMIP1", ncol, nrow, rowtype, rhs, NULL, obj, colbeg, NULL, rowidx, matval, lb, ub, nmip, 0, miptype, mipcol, NULL, NULL, NULL, NULL, NULL); • 求解问题 XPRSmaxim(prob,"g");
MIP模型 2:增加最小投资量限制 • 新的约束条件 • 如果买进一支股票,则投资该股票的金额占整个资金的比例至少大于一个最小值
实现 • 在前面的基础上将变量定义为半连续类型 double sclim[] = {0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1};
第4章 二次规划 • 将QP模型转换为矩阵格式; • 使用Xpress-Optimizer优化器输入和求解QP问题。
问题描述 • 投资者可能从不同的角度考虑投资组合选择问题:现在他希望限制投资风险并获得一定的目标收益,而不是最大化估计收益和限制高风险投资的比例。他采用Markowitz方法来得到股票投资的估计收益的方差/协方差矩阵的估计值。(例如,硬件和软件公司价值趋势趋于一致,但是与戏剧产业的成功相反,因为当人们厌烦新的计算机和计算机游戏时人们会更多的选择去剧院。)戏剧产业的收益是容易发生变化的,但是国债收益是一定的。估计收益和方差/协方差矩阵在下表给出:
方差/协方差矩阵
问题 • 问题1:投资者采用哪种投资策略可以达到在给定最小目标收益约束的情况下使方差最小? • 问题2:如果投资者希望最多投资四种不同的股票,哪种投资策略的方差最小(同样是在给定最小目标收益约束的情况下)?
模型修改 • 新目标函数:以均方差代替总收益。 • 移除与风险相关的约束条件。 • 增加新的约束条件:目标收益。
矩阵表示
定义二次项系数矩阵 • 定义一个被乘项 qcol1[] • 定义一个乘项 qcol2[] • 定义系数矩阵 qval[]
载入矩阵问题 • XPRSloadqp(prob, "FolioQP", ncol, nrow, rowtype, rhs, NULL, obj, colbeg, NULL, rowidx, matval, lb, ub,nqt, qcol1, qcol2, qval);
民权资讯网推广营销知识泉州seo顾问名典出生八字起名2020年男宝宝起乳名seo技术培训费用废柴道士的爆笑生活网站建设 济南恐龙之前的生命店起名免费起名网推广品牌营销公司诗经楚辞起牛年男孩名字beyondcompare破解版清宫秘史风犬少年的天空免费完整版水瓶女和金牛男造梦西游4内购破解版2米宽的餐厅周易刘镇旗文安县医院魔兽比赛地图姓高的名字怎么起重庆二手手机邓起名称大全男孩商丘的超市推八字算命看什么书开网店起什么名朝花夕拾观后感ppt周易讲风水吗医生那边不能碰太舒服千明周易国学少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了