#include<iostream>
#include<cmath>
#include"stdio.h"
using namespace std;
#define M 10000
//全局变量
float kernel[110][310];//核心矩阵表
int m = 0, n = 0, t = 0;
//m:约束不等式个数
//n:结构向量的个数
//t:目标函数类型:-1代表求求最小值,1代表求最大值
//输入接口函数
void input()
{//读入所求问题的基本条件   cout << "----------参 数 输 入-----------" << endl;cout << "请按提示输入下列参数:" << endl << endl;cout << "  结构向量数n:  " << "   n=  ";//cin>>n;n = 6;cout << endl << "  约束不等式数m:" << "   m=  ";//cin>>m;m = 5;int i, j;//初始化核心向量   for (i = 0; i <= m + 1; i++)for (j = 0; j <= n + m + m; j++)kernel[i][j] = 0;//读入约束条件   cout << endl << "  约束方程矩阵的系数及不等式方向(1代表<=,-1代表>=):" << endl << endl << "          ";for (i = 1; i <= n; i++)cout << "   x" << i;cout << "  不等式方向 " << " 常数项" << endl;//for (i=1;i<=m;i++)    //{    //cout<<"    不等式"<<i<<"  ";   //for (j=1;j<=n+2;j++)      //cin>>kernel [i][j];   //}   i = 1;kernel[i][1] = 4;kernel[i][2] = 1;kernel[i][3] = 0;kernel[i][4] = 1;kernel[i][5] = 0;kernel[i][6] = 0;kernel[i][7] = 1;kernel[i][8] = 325;float(*c)[310] = kernel;i = 2;c[i][1] = 0;c[i][2] = 1;c[i][3] = 0;c[i][4] = 0;c[i][5] = 1;c[i][6] = 0;c[i][7] = 1;c[i][8] = 300;i = 3;c[i][1] = 0;c[i][2] = 0;c[i][3] = 1;c[i][4] = 0;c[i][5] = 0;c[i][6] = 1;c[i][7] = 1;c[i][8] = 275;i = 4;c[i][1] = 1;c[i][2] = 1;c[i][3] = 1;c[i][4] = 0;c[i][5] = 0;c[i][6] = 0;c[i][7] = 1;c[i][8] = 350;i = 5;c[i][1] = 0;c[i][2] = 0;c[i][3] = 0;c[i][4] = 12;c[i][5] = 1;c[i][6] = 1;c[i][7] = 1;c[i][8] = 600;for (i = 1; i <= m; i++){kernel[i][0] = kernel[i][n + 2];kernel[i][n + 2] = 0;}//读入目标条件   cout << endl << endl << " 目标函数的系数及类型(求最小值:1;求最大值:-1):" << endl << endl << "                ";for (i = 1; i <= n; i++)cout << "x" << i << "   ";cout << "类型" << endl << "  \n";cout << "  目标函数:   ";//for (i=1;i<=n;i++)   //cin>>kernel [0][i];   //cin>>t;   i = -1;kernel[0][1] = 2.5;kernel[0][2] = 1.7;kernel[0][3] = 1.8;kernel[0][4] = 2.5;kernel[0][5] = 1.8;kernel[0][6] = 1.4;t = -1;//矩阵调整   if (t == -1)for (i = 1; i <= n; i++)kernel[0][i] = (-1)*kernel[0][i];for (i = 1; i <= m; i++){kernel[i][n + i] = kernel[i][n + 1];if (i != 1)kernel[i][n + 1] = 0;}
}//算法函数
void comput()
{int i, j, flag, temp1, temp2, h, k = 0, temp3[100];float a, b[110], temp, temp4[110], temp5[110], f = 0, aa, d, c;//初始化   for (i = 1; i <= m; i++)temp3[i] = 0;for (i = 0; i < 11; i++){temp4[i] = 0;temp5[i] = 0;}for (i = 1; i <= m; i++){if (kernel[i][n + i] == -1){kernel[i][n + m + i] = 1;kernel[0][n + m + i] = M;temp3[i] = n + m + i;}elsetemp3[i] = n + i;}for (i = 1; i <= m; i++)temp4[i] = kernel[0][temp3[i]];//循环求解   do {for (i = 1; i <= n + m + m; i++){a = 0;for (j = 1; j <= m; j++)a += kernel[j][i] * temp4[j];kernel[m + 1][i] = kernel[0][i] - a;}for (i = 1; i <= n + m + m; i++){if (kernel[m + 1][i] >= 0) flag = 1;else{flag = -1;break;}}if (flag == 1){for (i = 1; i <= m; i++){if (temp3[i] <= n + m) temp1 = 1;else{temp1 = -1;break;}}//输出结果   cout << endl << endl;cout << "----------结 果 输 出-----------" << endl << endl;if (temp1 == 1){cout << " 此线性规划的最优解存在!" << endl << endl << "  最优解为:" << endl << endl << "     ";for (i = 1; i <= m; i++)temp5[temp3[i]] = kernel[i][0];for (i = 1; i <= n; i++)f += t * kernel[0][i] * temp5[i];for (i = 1; i <= n; i++){cout << "x" << i << " = " << temp5[i];if (i != n)cout << ", ";}cout << " ;" << endl << endl << "     最优目标函数值f= " << f << endl << endl;return;}else{cout << " 此线性规划无解" << endl << endl;return;}}if (flag == -1){temp = 100000;for (i = 1; i <= n + m + m; i++)if (kernel[m + 1][i] < temp){temp = kernel[m + 1][i];h = i;}for (i = 1; i <= m; i++){if (kernel[i][h] <= 0) temp2 = 1;else {temp2 = -1;break;}}}if (temp2 == 1){cout << "此线性规划无约束";return;}if (temp2 == -1){c = 100000;for (i = 1; i <= m; i++){if (kernel[i][h] != 0)  b[i] = kernel[i][0] / kernel[i][h];if (kernel[i][h] == 0)  b[i] = 100000;if (b[i] < 0)     b[i] = 100000;if (b[i] < c){c = b[i];k = i;}}temp3[k] = h;temp4[k] = kernel[0][h];d = kernel[k][h];for (i = 0; i <= n + m + m; i++)kernel[k][i] = kernel[k][i] / d;for (i = 1; i <= m; i++){if (i == k)continue;aa = kernel[i][h];for (j = 0; j <= n + m + m; j++)kernel[i][j] = kernel[i][j] - aa * kernel[k][j];}}} while (1);return;
}//主函数
int main()
{cout << "-------------------单纯形算法程序----------------------" << endl << endl;input();printf_s("\n----------------------------\n----------------------------\n----------------------------\n");comput();int a = 0;scanf_s("%d", &a);return 1;
}

用C++解线性规划问题相关推荐

  1. 【运筹与优化】单纯形法解线性规划问题(matlab实现)

    文章目录 单纯形法步骤: 1.将线性规划问题化为标准形式 2.列出单纯形表 3.进行最优性检验 4.从一个基可行解转换到另一个目标值更大的基可行解,列出新的单纯形表 5.重复3.4直到计算结束为止 举 ...

  2. matlab 非线性规划如何看是否可行解,[MATLAB数学相关] linprog解线性规划问题无可行解,但lindo能解出来...

    linprog解线性规划问题无可行解,但lindo能解出来 现在正做一篇论文的模拟实验,需要用到matlab解线性规划,但遇到了下面的问题: f = [256; 256; 121; 225; 196; ...

  3. linprog解线性规划

    linprog函数用于解线性规划 在约束条件下求z极值 maxz=[k1x1+k2x2]maxz=[k_1x_1+k_2x_2]maxz=[k1​x1​+k2​x2​] a1x1+a2x2<=c ...

  4. matlab优化工具箱解线性规划,用matlab优化工具箱解线性规划

    实验二:用m atlab 优化工具箱解线性规划 学号:16 姓名:任亚伟 系别专业:12信计1班 一.实验目的 通过具体的题目实例,使学生理解数学建模的基本思想和方法,掌握数学建模分析和解决的基本过程 ...

  5. 单纯形法解线性规划初探(停更,高三毕业填坑)

    原文地址:戳这里 因为博主不会LaTex所以公式和数学表达就都用图片啦 我们来介绍一种解决线性规划的一般的方法,叫做单纯形法.现在我们在一个简单的例子上模拟一下这个算法: 为了能够执行我们的算法,我们 ...

  6. matlab中linprog函数解线性规划方程

    线性规划问题,建立线性规划问题模型的基本步骤: 一.明确目标 二.确定问题的决策变量 三.构建目标函数 四.确定约束条件 建立好线性规划方程之后,紧接着而来的就是如何解方程,我们使用 matlab中的 ...

  7. matlab实现单纯型法解线性规划_【运筹学教程】求解线性规划问题的单纯形法

    这是本公众号的第①篇文章 主要讲述运筹学中求解线性规划问题的单纯形方法:单纯形法是运筹学中求解线性规划问题的主要方法,其他一些求解大规模优化问题的算法,如列生成算法等,都是在该算法的基础上发展而来的. ...

  8. matlab实现单纯型法解线性规划_【考研运筹学讲解】线性规划(一)

    哈喽,大家好,初次见面,我是"小黑哥交通考研" 我们致力于为大家提供最新最齐全的交通考研信息,欢迎大家关注~ 关注小黑,就地起飞! 我们还邀请了考研成功的学长学姐为大家分享考研心得 ...

  9. Matlab解线性规划(linprog)

    目录 一.题目 求解线性变化对应的最大值z,以及x1,x2,x3. 二.分析 三.Matlab解题 四.运行结果 一.题目 求解线性变化对应的最大值z,以及x1,x2,x3. 二.分析 是目标函数,剩 ...

最新文章

  1. Host is not allowed to connect to this MySQL server解决方法
  2. android sqlite 参数,Android SQLite3命令详解教程
  3. 2019/4/4 动态规划
  4. ES6 - 字符串模板与新增字符串方法
  5. USTC English Club Note20171016(2)
  6. 单片机关于RAM的作用
  7. android分享图片功能实现原理,Android:简单实现并理解图片三级缓存
  8. php 文件上传mime 类型,PHP JAVA C上传文件如何准确判断文件类型-mime知识普及
  9. 心胸狭窄小肚鸡肠的男人_为心胸开阔的教育者编写新的剧本
  10. 【es】es 分布式一致性原理剖析(二)-Meta篇
  11. 用阿里开源的 Nacos 搞微服务真香!
  12. 为什么300的并发能把支持最大连接数4000数据库压死
  13. 电子技术课设------交通灯信号控制器
  14. 时间管理类APP分析:拇指时间
  15. 《易经》里的28条法则与64个大智慧
  16. 2019年12月份统考计算机应用基础题库,2019年12月网络教育统考《计算机应用基础》模拟题...
  17. Spring Cloud LoadBalanced 切换负载均衡策略
  18. 数据结构(Java)-树-堆排序的实现
  19. MFC基于select模型的套接字类之服务器(1)
  20. 直播预告|ICML专场最后一场啦!来蹲守直播间呀

热门文章

  1. 如何利用机器学习甄别淘宝优质店铺
  2. 基于SVM.NET的验证码识别算法实现
  3. Project Euler__problem 5
  4. 硬件工程师都没人干了_资深电气工程师经验心得分享
  5. 连续模具制造需要注意什么
  6. vue权限管理的设计与实现
  7. 优秀邮件主题行能为邮件点击率创造巨大营销,你知道吗?
  8. php解决latin1转码,MySQL latin1字符集PHP读取中文乱码解决方案
  9. springboot整合swagger+mybatisplus案例
  10. 软银中国在华首次投资AI公司,码隆科技获2.2亿B轮融资