在本程序中默认该现行规划问题有最优解

针对此问题:

 #include<iostream>
using namespace std; int check(float *sigema, int m) {
for (int i = ; i <= m ; i++) {
if (sigema[i] > ) {
return ;
}
}
return ;
} //此程序已经化为标准型的线性规划问题中,且默认有最优解
int main(int argc, char* argv[])
{
//数据输入部分
int m, n;
cout << "请输入变量个数:";
cin >> m;
cout << "请输入不等式个数:";
cin >> n;
float **matrix = new float*[n + ]; //系数矩阵
for (int i = ; i <= n; i++) {
matrix[i] = new float[m + ];
}
float *cj = new float[m + ];
float *cB = new float[n + ]; //基变量系数
int *XB = new int[n + ]; //用来标注基变量x的下标
float *b = new float[n + ];
float *sigema = new float[n + ];
float *sita = new float[n + ];
//初始化
for (int i = ; i <= m; i++) {
cj[i] = ;
}
for (int i = ; i <= n; i++) {
cB[i] = ;
XB[i] = ;
b[i] = ;
sigema[i] = ;
sita[i] = ;
}
cout << "请输入目标函数系数(用空格间开):" << endl;
for (int i = ; i <= m; i++) {
cin >> cj[i];
}
cout << "请输入各不等式的系数和常量(用空格间开):" << endl;
for (int i = ; i <= n; i++) {
cout << "不等式" << i << ": ";
for (int j = ; j <= m + ; j++) {
cin >> matrix[i][j];
}
}
cout << "请输入目标函数中基变量下标:" << endl;
for (int i = ; i <= n; i++) {
cin >> XB[i];
cB[i] = cj[XB[i]];
//常量
b[i] = matrix[i][m + ];
} //计算检验数
for (int i = ; i <= m; i++) {
sigema[i] = cj[i];
for (int j = ; j <= n; j++) {
sigema[i] -= cB[j] * matrix[j][i];
}
} while (check(sigema, m) == ) {
//寻找入基变量
float maxn = sigema[];
int sigema_xindex = ;
float sigema_xcoefficient = ;
for (int i = ; i <= m; i++) {
if (maxn <= sigema[i]) {
maxn = sigema[i];
sigema_xindex = i;
sigema_xcoefficient = cj[i];
}
}
//计算sita
for (int i = ; i <= n; i++) {
if (matrix[i][sigema_xindex] > ) {
sita[i] = b[i] / matrix[i][sigema_xindex];
}
else {
sita[i] = ; //表示sita值为负数
}
}
//寻找出基变量
float minn = sita[];
int sita_xindex = ;
for (int i = ; i <= n; i++) {
if (minn >= sita[i] && sita[i] > ) {
minn = sita[i];
sita_xindex = i;
}
}
//入基出基变换,先入基再出基
//入基操作
for (int i = ; i <= n; i++) {
if (i == sita_xindex) {
XB[i] = sigema_xindex;
cB[i] = sigema_xcoefficient;
break;
}
}
//出基计算
//化1
//cout << endl << "此处为化1的结果------" << endl;
float mul1 = matrix[sita_xindex][sigema_xindex];
for (int i = ; i <= m; i++) {
matrix[sita_xindex][i] /= mul1;
}
b[sita_xindex] /= mul1;
//化0
//cout << endl << "此处为化0的结果------" << endl;
for (int i = ; i <= n; i++) {
if (i == sita_xindex) {
continue;
}
float mul2 = matrix[i][sigema_xindex] / matrix[sita_xindex][sigema_xindex];
for (int j = ; j <= m; j++) {
matrix[i][j] -= (matrix[sita_xindex][j] * mul2);
}
b[i] -= (b[sita_xindex] * mul2);
}
for (int i = ; i <= n; i++) {
if (i == sita_xindex) {
continue;
}
}
for (int i = ; i <= m; i++) {
sigema[i] = cj[i];
for (int j = ; j <= n; j++) {
sigema[i] -= cB[j] * matrix[j][i];
}
}
}
float MaxZ = ;
float *result = new float[m + ];
for (int i = ; i <= m; i++) {
result[i] = ;
}
for (int i = ; i <= n; i++) {
result[XB[i]] = b[i];
}
cout << "最优解为:X = (";
for (int i = ; i < m; i++) {
cout << result[i] << ",";
}
cout << result[m] << ")" << endl;
for (int i = ; i <= m; i++) {
MaxZ += result[i] * cj[i];
}
cout << "最优值为:MzxZ = " << MaxZ;
return ;
}

程序运行结果:

c++实现单纯形法现行规划问题的求解的更多相关文章

  1. Excel与Google Sheets中实现线性规划求解

    很久没更新过APS系列文章了,这段时间项目工作确实非常紧,所以只能抽点时间学习一下运筹学的入门知识,算是为以后的APS项目积累点基础.看了一些运筹学的书(都是科普级别的)发现原来我目前面对的很多排产. ...

  2. 单纯形法MATALAB实现

    参考单纯形法的步骤,MATALAB中的实现如下(求极小值): 注:对于极大值的求解,只需要对目标函数添加负号,求解出来的\(X\),再带入原目标函数即可. function [ X, z ] = si ...

  3. 分数规划(Bzoj1486: [HNOI2009]最小圈)

    题面 传送门 分数规划 分数规划有什么用? 可以把带分数的最优性求解式化成不带除发的运算 假设求max{\(\frac{a}{b},b>0\)} 二分一个权值\(k\) 令\(\frac{a}{ ...

  4. 【转】ACM训练计划

    [转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...

  5. 怎么进入BAT的研发部门?

    怎么进入BAT的研发部门? ======================================剑指offer+leetcode+geeksforgeeks+编程之美+算法导论====秒杀BA ...

  6. Hard Life

    poj3155:http://poj.org/problem?id=3155 题意:最大密度子图的模板题. 题解:直接看代码. /* 题意简述一个公司有n个人,给出了一些有冲突的人的对数(u,v),所 ...

  7. 自学Aruba1.4-WLAN厂家魔力象限

    点击返回:自学Aruba之路 1.4 自学Aruba1.4-WLAN厂家魔力象限 以下为2017<有线和无线局域网接入基础设施的魔力象限>报告:      Aruba.cisco为无线领域 ...

  8. 自学Aruba1.3-WLAN厂家魔力象限

    点击返回:自学Aruba之路 自学Aruba1.3-WLAN厂家魔力象限 以下为2017<有线和无线局域网接入基础设施的魔力象限>报告:      Aruba.cisco为无线领域领导者. ...

  9. SVM个人学习总结

    SVM个人学习总结 如题,本文是对SVM学习总结,主要目的是梳理SVM推导过程,以及记录一些个人理解. 1.主要参考资料 [1]Corres C. Support vector networks[J] ...

随机推荐

  1. 致歉Note7用户后,三星要还给世界下一个机皇

    ​ 1月23日,三星电子在韩国首尔公布了Note7事件原因调查结果.此次认定过程精密而繁琐,最终结果发布距离三星宣布全球召回Note7已经有3个月. 相比事发之初各路信息甚嚣尘上,现在虽然还不能说已经 ...

  2. 软工 实验一 Git代码版本管理

    实验目的: 1)了解分布式版本控制系统的核心机理: 2)   熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指令 3 ...

  3. 达拉草201771010105《面向对象程序设计(java)》第一周学习总结

    达拉草201771010105<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...

  4. golang在debian下不能用sudo进行使用的问题

    sudo ln -s /usr/local/go/bin/go /usr/bin/go 然后就ok了. 去查了下这两个路径的差别,也没查出什么.只是说/usr/bin 是系统预装所在的路径.

  5. MacOS麦克风输入监听的方法

    Windows上很多人都知道,然而实际上并没什么用——延迟太大,根本没法用. MacOS上有两种方法: QuickTime Player新建音频录制(不需要真的录音),如下图: 这个方法和Window ...

  6. Lambda 语法

    1.java8 Lambda表达式语法简介 (此处需要使用jdk1.8或其以上版本) Lambd表达式分为左右两侧 * 左侧:Lambda 表达式的参数列表 * 右侧:Lambda 表达式中所需要执行 ...

  7. javascript闭包的用处

    谈及javascript的闭包,可能想到的就是内存泄露,慎用闭包,但是实际上闭包还有更多好的作用: 1,可以将for循环的变量封闭在闭包环境中,下面这种情况,无论点击1-5div,最终打印的都是5,因 ...

  8. 如何分析SpringBoot源码模块及结构?--SpringBoot源码(二)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一). 前面搭建好了自己本地的S ...

  9. Ubuntu 16 编译装python2.7

    Ubuntu 16自带 python3 ,有很多库无法使用,决定装 python2.7 试了试,好像 apt-get 装不上. 使用源码,编译安装. wget https://www.python.o ...

  10. JAVA生成EXCEL模板

    JAVA生成excel模板,支持1.必填字段前加 红色 * 2.定义可选值下拉列表 valList3.定义名称并通过名称设置可选值 refName(名称在sheet2,sheet2自动隐藏)4.支持设 ...