刚学习了线性规划的部分,作业就是自行实现单纯形法,看起来麻烦,其实也不麻烦,详细单纯形内容参见《运筹学》,算法部分参照《算法导论》。
注:以下代码缺少判定是否无界的情况,只要在代码中加入验证即可。
1>确定基向量,即
//取得基向量,遍历A,取得一列仅有一个1的列
private List<int> al = new List<int>();//存储基变量的脚标
for (int i = 0; i < A.GetLength(1); i++)
{
flag = 0;
for (int j = 0; j < A.GetLength(0); j++)
{
if(A[j, i]==1) flag += 1;
if(A[j, i]==0) flag += 0;
if((A[j, i]!=1)&&(A[j, i]!=0)) flag+=2;
}
if (flag == 1) this.al.Add(i);
}
2>确定cj-zj
private void get_c_z() //得到判定数组
{
for (int i = 0; i < this.c_z.Length; i++)
{
this.c_z[i]=

这篇博客详细介绍了如何用C#实现线性规划问题的单纯形算法。作者参照了《运筹学》和《算法导论》来编写代码,并提到了实现过程中涉及的关键步骤,包括确定基向量、计算cj-zj、选取主变元、进行高斯消元以及设置运行结束条件。需要注意的是,当前代码未处理无界解的情况。
最低0.47元/天 解锁文章
4181





