- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)