c语言线性规划求解函数 c语言线性代数方程组求解( 二 )


0.15x1+0.2x2+0.25x3+0.3x4+0.35x5+s2=0.3
其中 s1 和 s2 分别为人工变量,用来将不等式转化为等式 。
将约束条件和目标函数写成标准形式:
目标函数:z = 0.1x1+0.15x2+0.2x3+0.25x4+0.3x5+0s1+0s2
约束条件:
x1+x2+x3+x4+x5+s1=100
0.15x1+0.2x2+0.25x3+0.3x4+0.35x5+s2=0.3
x1≥0,x2≥0,x3≥0,x4≥0,x5≥0
s1≥0 , s2≥0
初始化单纯形表格:
基变量 x1 x2 x3 x4 x5 s1 s2 右端项
s1 1 1 1 1 1 1 0 100
s2 0.15 0.2 0.25 0.3 0.35 0 1 0.3
z 0.1 0.15 0.2 0.25 0.3 0 0 0
选取进入变量和离开变量:
由于目标函数中的系数都为正数,所以选取进入变量时应该选择系数最大的变量,即 x5 。然后根据约束条件和单纯形表格计算出各个变量的单位贡献,得到:
x1: 0.1/1 = 0.1
x2: 0.15/1 = 0.15
x3: 0.2/1 = 0.2
x4: 0.25/1 = 0.25
x5: 0.3/1 = 0.3
s1: 0/1 = 0
s2: 0/0.35 = 0
由于 x5 的单位贡献最大,所以将 x5 作为进入变量,然后选取离开变量 。根据单纯形表格计算出各个变量的限制系数,得到:
x1: 1/0.35 = 2.857
x2: 1/0.35 = 2.857
x3: 1/0.35 = 2.857
x4: 1/0.35 = 2.857
s1: 1/0.35 = 2.857
s2: 1/0.35 = 2.857
由于 s2 的限制系数最小且大于 0,所以将 s2 作为离开变量 。
进行高斯-约旦消元法计算:
基变量 x1 x2 x3 x4 x5 s1 s2 右端项
s1 0.35 0.35 0.35 0.35 0
用c语言编程minf=x y z(s.t.4x 2y z≥100,2x手机发的知道,“+”丢失了 。该故障已经多次向百度知道反?。奕舜恚 。。?
已知:
4x+2y+z≥100
2x+5y+6z≥80
x+y+z≤32
x≥0,y≥0,z≥0
求:f=x+y+z的最小值 。
是这个意思吗?
就是下列平面围成的空间,与平面簇x+y+z=k外接的那两个平面的对应的k之中较小的一个:
4x+2y+z=100
2x+5y+6z=80
x+y+z=32
x=0,y=0,z=0
属于规划问题 。
作图法知道,下列三个平面的交点就是所求:
4x+2y+z=100
2x+5y+6z=80
z=0
(x=21.25,y=7.5,z=0),x+y+z最小值=28.75
算法很多 。
线性规划之单纯型算法
问题定义:
问题定义比较复杂,建议看《算法导论》里的线性规划一章 。单纯型算法用于求解如下这类问题:
例:
求等式的最小值:-2X1– 3X2
且自变量满足如下约束:
X1 + X2 = 7
X1–2X2 = 4
X1 =0
将约束等式转换为标准型:
标准型的条件:
1. 求目标函数的最大值
2. 每个自变量都大于等于零(非负约束)
3.约束不等式 , 只有最小化约束
转换结果如下:
max2X1 – 3X2 + 3X3
并且满足:
X1 + X2- X3 = 7
-X1 – X2+ X3 = -7
X1 – 2X2+ 2X3 = 4
X1,X2, X3 = 0
将标准型转换成松弛型:
z = 2X1– 3X2 + 3X3
X4 = 7- X1 - X2
+ X3
X5 = -7+ X1 + X2 - X3
X6 = 4- X1 + 2X2 - 2X3
则基本变量为的下标集合 B = {4, 5, 6}
非基本变量的下标集合 N = {1, 2, 3}
C = [ 233 ]T
b = [ 7-7 4 ]T
A
11-1
-1 -11
1-22
v = 0
具体实现时,将 A,b, C,v都存储在一个数组中
data
0v2c-3c3c
7b1A1A-1A
-7b-1A-1A1A
4b1A-2A2A
代码如下:
/*
*Copyright(c) Computer Science Department of XiaMen University
*
*Authored by laimingxing on: 2012年 03月 03日 星期六 00:14:35 CST
*
* @desc:
*
* @history
*/
#include iostream
#includealgorithm
#include vector
#include string.h
using namespace std;
const double unbounded = 10000000;
const int MAX = 10;
int n;

推荐阅读