用c语言实现单纯形法的编程

更新时间:2023-04-28 09:31:02 阅读量:1 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

用c语言实现单纯形法的编程

#include "stdio.h"

#include "math.h"

#include

int M,N;

float c[100],a[100][100],b[100],CZ[100],Dn[100],th[100],x[100]; int Fn[100];

int K,L,ths;

float zy;

int shuru();

void findmm();

void chang();

main()

{

float max_Z,sum=0,s=0;

int i,j,r=0;

if(!shuru()) { printf("ERROR!!!\n");return 0;}

while(r

for(j=0;j

{if(Dn[j]>0){findmm();

if(ths==M) {goto loop;}

else chang();

}

else r++;

}

}

loop:

if(ths==M)

{printf("\n此线性规划没有有限最优解!!!\n");

printf("\n此线性规划最终迭代结果为:");

printf("\n Cj ");

for(j=0;j

printf("%.3f ",c[j]);

printf("\n");

printf("Cb Xb b ");

for(j=0;j

printf(" x%d ",j+1);

printf(" th ");

for(i=0;i

{ printf("\n%.1f ",CZ[i]);

printf("x%d ",Fn[i]+1);

printf("%.3f ",b[i]);

for(j=0;j

{ printf(" %.3f ",a[i][j]);}

printf(" %.3f ",th[i]);

printf("\n");

}

printf(" Dn ");

for(j=0;j

printf(" %.3f ",Dn[j]);

printf("\n");

printf("\n此时的解为:");

sum=0;

for(i=0;i

{ sum+=CZ[i]*b[i];

printf("\nx%d=%.3f",Fn[i]+1,b[i]);

}

max_Z=sum;

printf("\n此时目标函数的值为:Z= %.3f\n",max_Z); }

else

{printf("\n此线性规划最终迭代结果为:");

printf("\n Cj ");

for(j=0;j

printf("%.3f ",c[j]);

printf("\n");

printf("Cb Xb b ");

for(j=0;j

printf(" x%d ",j+1);

printf(" th ");

for(i=0;i

{ printf("\n%.1f ",CZ[i]);

printf("x%d ",Fn[i]+1);

printf("%.3f ",b[i]);

for(j=0;j

{ printf(" %.3f ",a[i][j]);}

printf(" %.3f ",th[i]);

printf("\n");

}

printf(" Dn ");

for(j=0;j

printf(" %.3f ",Dn[j]);

printf("\n");

printf("\n故,目标函数的基解为:");

sum=0;

for(i=0;i

{ sum+=CZ[i]*b[i];

printf("\nx%d=%.3f",Fn[i]+1,b[i]);

}

max_Z=sum;

printf("\n目标函数的值为:max_Z= %.3f\n",max_Z); }

system("pause");

return 1;

}

int shuru()

{ int i,j;

float sum=0;

printf("请输入线性规划问题的约束条件个数M:"); scanf("%d",&M);

printf("请输入线性规划问题的决策变量个数N:"); scanf("%d",&N);

printf("请输入目标函数的系数:");

for(i=0;i

scanf("%f",&c[i]);

printf("请输入线性规划问题的约束矩阵:\n");

for(i=0;i

{ for(j=0;j

scanf("%f",&a[i][j]);

scanf("%f",&b[i]);

}

printf("请输入线性规划问题的初始基:\n");

for(j=0;j

scanf("%f",&x[j]);

for(i=j=0;j

{if(x[j]!=0)

{ Fn[i]=j;CZ[i]=c[j];i++;}

}

for(j=0;j

{ sum=0;

for(i=0;i

sum+=CZ[i]*a[i][j];

Dn[j]=c[j]-sum;

}

return 1;

}

void findmm()

{ int i;

int max,min;

max=0;

K=max;

for(i=1;i

if(Dn[i]>Dn[K]) max=i;

K=max;

for(i=0;i

{if(a[i][K]!=0) {th[i]=b[i]/a[i][K];min=i;} else th[i]=-1;

}

ths=0;

for(i=0;i

if(th[i]<0) ths=ths+1;

for(i=0;i

if((th[i]>0)&&(th[i]

L=min;

zy=a[L][K];

Fn[L]=K;

CZ[L]=c[K];

}

void chang()

{ int i,j;

float t;

for(j=0;j

a[L][j]=a[L][j]/zy;

b[L]=b[L]/zy;

for(i=0;i

{

if(i==L) continue;

t=a[i][K];

b[i]=b[L]*(-t)+b[i];

for(j=0;j

a[i][j]=a[L][j]*(-t)+a[i][j];

}

t=Dn[K];

for(j=0;j

Dn[j]=(-t)*a[L][j]+Dn[j];

K=0;

for(i=1;i

if(Dn[i]>Dn[K]) K=i;

for(i=0;i

{if(a[i][K]!=0) {th[i]=b[i]/a[i][K];} else th[i]=-1;

}

}

本文来源:https://www.bwwdw.com/article/km7q.html

《用c语言实现单纯形法的编程.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top