用C++解线性规划问题
#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++解线性规划问题相关推荐
- 【运筹与优化】单纯形法解线性规划问题(matlab实现)
文章目录 单纯形法步骤: 1.将线性规划问题化为标准形式 2.列出单纯形表 3.进行最优性检验 4.从一个基可行解转换到另一个目标值更大的基可行解,列出新的单纯形表 5.重复3.4直到计算结束为止 举 ...
- matlab 非线性规划如何看是否可行解,[MATLAB数学相关] linprog解线性规划问题无可行解,但lindo能解出来...
linprog解线性规划问题无可行解,但lindo能解出来 现在正做一篇论文的模拟实验,需要用到matlab解线性规划,但遇到了下面的问题: f = [256; 256; 121; 225; 196; ...
- linprog解线性规划
linprog函数用于解线性规划 在约束条件下求z极值 maxz=[k1x1+k2x2]maxz=[k_1x_1+k_2x_2]maxz=[k1x1+k2x2] a1x1+a2x2<=c ...
- matlab优化工具箱解线性规划,用matlab优化工具箱解线性规划
实验二:用m atlab 优化工具箱解线性规划 学号:16 姓名:任亚伟 系别专业:12信计1班 一.实验目的 通过具体的题目实例,使学生理解数学建模的基本思想和方法,掌握数学建模分析和解决的基本过程 ...
- 单纯形法解线性规划初探(停更,高三毕业填坑)
原文地址:戳这里 因为博主不会LaTex所以公式和数学表达就都用图片啦 我们来介绍一种解决线性规划的一般的方法,叫做单纯形法.现在我们在一个简单的例子上模拟一下这个算法: 为了能够执行我们的算法,我们 ...
- matlab中linprog函数解线性规划方程
线性规划问题,建立线性规划问题模型的基本步骤: 一.明确目标 二.确定问题的决策变量 三.构建目标函数 四.确定约束条件 建立好线性规划方程之后,紧接着而来的就是如何解方程,我们使用 matlab中的 ...
- matlab实现单纯型法解线性规划_【运筹学教程】求解线性规划问题的单纯形法
这是本公众号的第①篇文章 主要讲述运筹学中求解线性规划问题的单纯形方法:单纯形法是运筹学中求解线性规划问题的主要方法,其他一些求解大规模优化问题的算法,如列生成算法等,都是在该算法的基础上发展而来的. ...
- matlab实现单纯型法解线性规划_【考研运筹学讲解】线性规划(一)
哈喽,大家好,初次见面,我是"小黑哥交通考研" 我们致力于为大家提供最新最齐全的交通考研信息,欢迎大家关注~ 关注小黑,就地起飞! 我们还邀请了考研成功的学长学姐为大家分享考研心得 ...
- Matlab解线性规划(linprog)
目录 一.题目 求解线性变化对应的最大值z,以及x1,x2,x3. 二.分析 三.Matlab解题 四.运行结果 一.题目 求解线性变化对应的最大值z,以及x1,x2,x3. 二.分析 是目标函数,剩 ...
最新文章
- Host is not allowed to connect to this MySQL server解决方法
- android sqlite 参数,Android SQLite3命令详解教程
- 2019/4/4 动态规划
- ES6 - 字符串模板与新增字符串方法
- USTC English Club Note20171016(2)
- 单片机关于RAM的作用
- android分享图片功能实现原理,Android:简单实现并理解图片三级缓存
- php 文件上传mime 类型,PHP JAVA C上传文件如何准确判断文件类型-mime知识普及
- 心胸狭窄小肚鸡肠的男人_为心胸开阔的教育者编写新的剧本
- 【es】es 分布式一致性原理剖析(二)-Meta篇
- 用阿里开源的 Nacos 搞微服务真香!
- 为什么300的并发能把支持最大连接数4000数据库压死
- 电子技术课设------交通灯信号控制器
- 时间管理类APP分析:拇指时间
- 《易经》里的28条法则与64个大智慧
- 2019年12月份统考计算机应用基础题库,2019年12月网络教育统考《计算机应用基础》模拟题...
- Spring Cloud LoadBalanced 切换负载均衡策略
- 数据结构(Java)-树-堆排序的实现
- MFC基于select模型的套接字类之服务器(1)
- 直播预告|ICML专场最后一场啦!来蹲守直播间呀