对偶单纯形法编程.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
云南大学数学与统计学实验教学中心实验报告 第 PAGE 1 页 共 NUMPAGES 3 页 云南大学数学与统计学实验教学中心实验报告 第 PAGE 1 页 共 NUMPAGES 2 页 云南大学数学与统计学实验教学中心 实 验 报 告 课程名称:运筹学实验 学期:2012~2013学年第二学期 成绩: 指导教师:葛瑜 学生姓名:卢富毓 学生学号:20101910072 实验名称:对偶单纯形法编程 实验要求: 必做 实验学时:2学时 实验编号:02 实验日期: 201 完成日期:2013/3/1 学院: 数学与统计学院 专业 : 信息与计算科学 年级: 2010级 一、实验目的 编程实现对偶(改进)单纯形法求解线性规划问题,加深对单纯形法的理解和掌握 二、实验环境 VS2010(C++) 三、实验内容 改进单纯形法的实验: 由于在一些情况下,当检验数Cj-Zj都小于零后了,但是其b的值却存在有负数了。这样的话,x中就会存在负值,这样与约束条件中xi0,就不符合。所以需要对单纯形法改进,得到对偶单纯形法。 四、实验过程 A、对偶单纯形法的算法思想 先用单纯形法计算,当检验数都为非正后,检查b是否有存在负值,若是有则使用对偶单纯形法。 确定换出量,找到b中为负值的最小值。确定对应的xi的换出。 再对单纯形表中的xi所在行的各系数进行检查,若所有Aij都大于零,则表示无可行解。若存在Aij小于零,则计算,找到其所换入的列以保证的到的对偶问题仍有可行解。 然后再按照原单纯形算法经行求解。重复上述步骤。 B、编译运行程序,输入约束方程的系数矩阵A,常矩阵B,价值系数C,得到最优解 为了保证得到的算法既能对特殊情形(有bi0)的情况下能求解,也能对一般的问题求解。这里给出了一下两组数据。 1、上一个实验报告中的求解的数据。 B=[2 ; 14 ; 2]; X=[3 -4 2 0 -5 5 0 0] 2、参照课本P62例题6中的2-6表给出的数据 X=[-2 -3 -4 0 0] D、运行结果如下图: 1)下图表示的是第一个数据带入后得到的结果。表示对偶单纯形法对一般的数据成立 2)下图表示的对偶单纯形法对b中存在负值时纠正的结果: a、初始化后的结果: b、优化后的结果: c、最后得到的结果: 最后得到的结果与书上例题所有的结果完全吻合。所以所编写的算法为对偶单纯形法。 五、实验总结 通过对对偶单纯形法算法的程序编写,进一步掌握了单纯形法。 同时,在编写的过程中,对,b的变换有了更加清晰的理解。 以及在求解过程中,对线性约束的标准型也有了明确的掌握。 六、源代码 源代码如下: #includeiostream #includeiomanip using namespace std; #define M -1000 class DanChun{ private: double A[100][120],B[30]; //创建一个二维数组,用来存储xi值以及b的值 double C[110],CB[40];//定义一个C矩阵用来存储x 的价值系数 double CZ[110];//CZ用来存储cj-zj的值 double sita[30];//用来存储sita的值 int XB[30];//用来存XB的值 double X[100];//用来存储最后计算的X的值 double w[100]; //Cj-Zj/X[i]的替换。 public: int n,m; void init();//1.将不等式约束的各矩阵进行赋值 bool FindE(int i, int j);//2.寻找A矩阵中的基向量 void FindCB(); //3.寻找有用价值系数,Cj-Zj需要用到的 int Cj_Zj(); //4.1求出cj-zj的值 int C_sita(int k);//4.2计算sita的值 void Com_DC();//4.用来计算单纯形法的主函数 void Com_E(int l, int k);//4.3求其单位向量 bool P_CjZj();//4.4 int Bbool(double b[], int k); //判断b中是否有负值存在 int TH(int l); //b有负值是,进行替换操作 void Display(); void Display1(); }; void DanChun::init(){ int i=0,j=0; cout请输入 m,n :; cinm; cinn; cout请输入线性约束矩阵:endl; for(i=0;

文档评论(0)

小教资源库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档