单纯形法实验报告.doc硬”8力,停
_ J. a
实验报告
(2011 一 2012年度第一学期)
名 称: 运筹学上机实验
题 目:用编程实现单纯形法
院 系: 数理系
班 级:
学 号:
学生姓名:
指导教师:
设计周数: ]周
成 绩:
日期:2011年11月20日
一、 实验的目的与要求
培养信息类学生面向对象编程技术的基本能力。
掌握单纯形法基本算法。
了解面向对象编程的基本概念,并用程序编写单纯形法,解决一定的应用问题。
二、 实验
预期实验成果要求
用程序编写简单的单纯形法计算程序,并能用其解决简单的单纯形法问题。
分析实现过程
1
先把方程化为标准型,列出增广矩阵,然后输入程序;
找到初始可行基,确定初始基可行解;
检验各非基变量Xj的检验数
E[j]= ECiAij-Cj,若 E|j]大于等于零,
则以得到最优解,可停止计算;否则进入下一步;
根据min (E[j]<0) =E[j],确定Xj为换入变量,按9规则计算
9 =min (Bi/Aik ) =B1/Alk
可确定XI为换出变量,转入下一步;
以Aik为主元素进行迭代,把Xk所对应的列向量
变换为(0,0... 1..., 0) t,将Xb列中的换为Xk,得到新的单纯形法。
重复(2) ~ (5),直到终止。
系统实现
(1)计算检验数
public void EB(doublet, ] JD, int [] XS, doublet] E, int []B)
(
for (int j = 0; j < cT; j++)
{
for (int i = 0; i < r ; i++)
{
E[j] + 二 JD[i, j] * XS[B[i]-l];
E[j] = E[j] - XS[j]:
}
计算检验数中最小值
public double MinO(doublet] E)
{
double temp = E[0];
for (int 1=0; 1 < c~l; 1++)
if (E[l] < temp) temp = E[l];
return temp ;
}
计算检验数最小值所对应的列下表
public int Mini(doublet] E)
(
int min 二 0;
for (int 1 = 0; 1 < cT; 1++)
{
if (E[l] < 0)
{
min 二 1;
break;
}
}
return min;
)
计算换出变量所对应的行下表
public int Min2(int [] B, double[, ] JD, double[] E) {
int L 二 Mini(E);
int min=0;
double temp = JD[0, c~l] / JD[0, L];
for (int 1=0; 1 < r; 1++)
{
if (JD[1 , c - 1] / JD[1 , L] < temp)
(
temp 二 JD[1, c - 1] / JD[1, L];
min 二 1;
}
}
return min;
对矩阵进行换基迭代
public void HB(doublet]
单纯形法实验报告 来自淘豆网m.daumloan.com转载请标明出处.