问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

C语言编单纯形法程序怎么写

提问网友 发布时间:2022-04-23 14:30
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2023-05-06 14:19
#include<stdio.h>
#include<math.h>
 
intm;  //记录约束条件方程组的个数
intn;  //记录未知量的个数
floatM=1000000.0;
floatA[100][100];   //用于记录方程组的数目和系数
floatC[100];      //用于存储目标函数中各个变量的系数
floatb[100];      //用于存储常约束条件中的常数
floatCB[100];     //用于存储基变量的系数
floatseta[100];   //存放出基与入基的变化情况
floatcn[100];   //存储检验数矩阵
floatx[100];
intnum[100];    //用于存放出基与进基变量的情况
floatZ=0;   //记录目标函数值
 
voidshuru();
voidprint();
intmincz();
intfind_line(int a);
voidexchange(int a,int b);
intmain()
{
    int i,j=0;
    int p,q,temp;  //q:换入,p:换出
    shuru();
   printf("\n--------------------------------------------------------------------------\n");
    printf(" \tCB\tXB\tb\t");
    for(i=0; i<n; i++)
        printf(" X(%d)\t",i+1);
    for(i=0; i<n; i++)
        x[i]=0;
    printf("\n");
    while(1) {
        q=mincz();
        if(q==-1) {
            print();
            printf("\n所得解已经是最优解!\n");
            printf("\n最优解为:\n");
            for(j=0; j<m; j++) {
                temp=num[j]-1;
                x[temp]=b[j];
            }
            for(i=0; i<n; i++) {
                printf("x%d=%.2f",i+1,x[i]);
                Z=Z+x[i]*C[i];
            }
            printf("Z=%.2f",Z);
            break;
        }
        print();
        p=find_line(q);
        printf("\np=%d,q=%d",p,q);
        if(q==-1) break;
        exchange(p,q);
    }
    return 0;
}
intmincz()
{
    int i,k=0;
    int flag=0; //检验数标记
    float min=0;
    for(i=0; i<n; i++)
        if(cn[i]>=0)
            flag=1;
        else {
            flag=0;
            break;
        }
    if(flag==1)
        return -1;
        //进行到此处,说明存在<0的检验数
        //找到最小的检验数,作为换入变量
    for(i=0; i<n; i++) {
        if(min>cn[i]) {
            min=cn[i];
            k=i;
        }
    }
    return k;
}
intfind_line(int a)
{
    int i,k,j;
    int flag=0;
    float min;
    k=a;
    for(i=0; i<m; i++)
        if(A[i][k]<=0)
            flag=1;
        else {
            flag=0;
            break;
        }
    if(flag==1) {
        printf("\n该线性规划无最优解!\n");
        return -1;
    }
    for(i=0; i<m; i++) {
        if(A[i][k]>0)
            seta[i]=b[i]/A[i][k];
        else seta[i]=M;
    }
    min=M;
    for(i=0; i<m; i++) {
        if(min>=seta[i]) {
            min=seta[i];
            j=i;
        }
    }
    num[j]=k+1;
    CB[j]=C[k];
    return j;
}
voidexchange(int p,int q)
{
    int i,j,c,l;
    float temp1,temp2,temp3;
    c=p; //行号,换出
    l=q; //列号,换入
    temp1=A[c][l];  //A[c][l]主元
    b[c]=b[c]/temp1;
    for(j=0; j<n; j++)
        A[c][j]=A[c][j]/temp1;  //主元化为1
    for(i=0; i<m; i++) {
        if(i!=c)
            if(A[i][l]!=0) {
                temp2=A[i][l];
                b[i]=b[i]-b[c]*temp2;
                //主元所在列,其余元素化为0
                for(j=0; j<n; j++)
                    A[i][j]=A[i][j]-A[c][j]*temp2;
            }
    }
    temp3=cn[l];
    for(i=0; i<n; i++)
        cn[i]=cn[i]-A[c][i]*temp3;
}
voidprint()
{
    int i,j=0;
   printf("\n--------------------------------------------------------------------------\n");
    for(i=0; i<m; i++) {
        printf("%8.2f\tX(%d) %8.2f",CB[i],num[i],b[i]);
        for(j=0; j<n; j++)
            printf("%8.2f ",A[i][j]);
        printf("\n");
    }
   printf("\n--------------------------------------------------------------------------\n");
    printf("\t\t\t");
    for(i=0; i<n; i++)
        printf(" %8.2f",cn[i]);
   printf("\n--------------------------------------------------------------------------\n");
}
voidshuru()
{
    int i,j; //循环变量
    int k;
    printf("请输入线性规划问题的约束条件个数M:");
    scanf("%d",&m);
    printf("请输入线性规划问题的决策变量个数N:");
    scanf("%d",&n);
    printf("\n请输入方程组的系数矩阵A(%d行%d列):\n",m,n);
    for(i=0; i<m; i++)
        for(j=0; j<n; j++)
            scanf("%f",&A[i][j]);
    printf("\n请输入初始基变量的数字代码矩阵:\n");
    for(i=0; i<m; i++)
        scanf("%d",&num[i]);
    printf("\n请输入方程组右边的值矩阵b:\n");
    for(i=0; i<m; i++)
        scanf("%f",&b[i]);
    printf("\n请输入目标函数各个变量的系数所构成的系数阵C:\n");
    for(i=0; i<n; i++)
        scanf("%f",&C[i]);
    for(i=0; i<n; i++)
        cn[i]=-C[i];
    for(i=0; i<m; i++) {
        k=num[i]-1;
        CB[i]=C[k];
    }
  }

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

土豆粉丝怎么煮,买回来的土豆粉丝?要浸泡下在煮还是用开水煮烫下在放入冷水中在煮?还是直接汤烧好放入 粉丝要泡多久? 东北土豆粉做菜前用冷水泡还是热水泡啊,泡多久啊? 干土豆粉, 用冷水泡多长时间才能泡开? 土豆炖粉条粉条用热水还是凉水 三星s9来短信的时候怎么调边上的灯 乾隆通宝到底值不值钱,乾隆通宝价格表大全 乾隆通宝现在市场价格多少? (乾隆通宝)价格多少? 手指上长疣怎么去除? 我的手指上 长了个 猴子 请问怎么才能 弄掉? 我手上长了个猴子怎么才能去掉呀? 乾隆宝通大钱值多少钱 手上长了个瘊子,有什么办法去掉?曾经用剪刀剪掉了,过段时间又长出来了,而且还有刺,有什么好办法去掉 手上的瘊子怎么去掉,需要多少钱? 乾隆通宝各局价格值多少钱,市场价格 怎样把手上的瘊子去出? 乾隆通宝铜钱价格表 有什么办法可以去掉手上的瘊子??? 乾隆通宝价格表 土豆粉和成面是用冷水还是热水 lingo编写单纯形法的程序怎么写? 土豆粉条吃之前泡不泡 单纯形法的C++程序详解过程 泡粉丝用热水还是冷水 单纯形法程序用法 土豆粉怎么泡有柔劲好吃 急求运筹学单纯型法的matlab程序代码!! 求matlab单纯型方法求解线性规划代码 土豆拌粉丝凉菜的做法 急急急!!高分!!编写程序实现利用单纯形法求解线性规划问题 单纯形法的C程序 再吃粉丝前,粉丝需要泡成哪种程度? 土豆粉需要煮多久熟? 在约束最优化中,用单纯形法解线性规划的matlab程序 土豆淀粉是怎么调的,是用开水,还是冷水 实验二:MATLAB编程单纯形法求解 目标规划单纯形法的C++编程 用单纯形法求解线性规划问题 请问各位朋友:谁有两阶段单纯形法的matlab程序,先谢谢了!
Top