Practical Guided to Simplex

标准线性优化问题

max cTxmax\ c^Tx

s.t. Ax=b, ARmn,nms.t.\ Ax=b,\ A\in R^{m*n},n\geq m

x0x\geq 0

S1:改写问题成标准型

  1. 极大化目标问题;
  2. 引入松弛变量转换不等式为等式;
  3. 对任意取值的变量引入两个非负变量表示;

S2:写出单纯形表

  1. 将约束方程组的系数按增广矩阵写出;
  2. 最后一行写目标函数的系数,增广右侧为0;
  3. 确定基变量(个数为约束方程组行数m)、非基变量(n-m),从基变量中选择pivot;
  4. 理论上,一组基变量构成可行域内的一个点(符合约束方程组);

alt

S3:高斯消元

  1. 将选为基变量的列通过高斯消元化为一个单位阵;
  2. 目标函数的系数也跟着变化;
  3. 通过高斯消元等价于让基变量的值可以通过增广右侧直接读出,而非基变量的值为0;
  4. 当所有基变量都是非负的(符合变量非负条件),那么得到的基解是可行解;

S4:选择新变量

  1. 表最后一行目标函数的系数如果存在负数,因为这可以通过选择相应的基变量使目标变小,选择最小的负数所在列为基变量(启发式最速变小),称为入基变量;

  2. 确定完入基变量,选择出基变量,依据逐行计算增广最右列值与入基变量列的系数比值,选择系数最小的正比值,所在行的基变量即为出基变量(pivot的概念);

    • 如果出基变量列的全部系数为负,则此规划问题无有限解
  3. 如果确定入基变量和出基变量,则继续返回第3步,进行高斯消元,如此迭代;

  4. 直到最后一行系数全部非负;

S5:写出最终解

  1. 所有的非基变量为0,所有基变量对应的解参考增广最右列值;

Tricks

  1. 如何确定初始的基变量
    • 如果松弛或剩余添加构成的矩阵是个满秩单位阵,直接采用;
    • 如果没有添加任何变量,则可以手动添加m个变量构成单位阵,且最后一行的系数取为很大的ω\omega
  2. 思考标准型是min或max对单纯性解法的影响;

Reference-Link

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:22
怎么这么多逆天求职者,救救我救救我救救我😭
flmz_Kk:哈哈哈哈哈哈,这么多求职者,肯定有那一两个逆天的
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务