第1部分_数学规划问题概述
什么是数学规划
约束条件下求极值
数学规划的一般形式
1.线性表达式 2.出现平方项,非线性表达式 3整数规划.
数学规划的分类
目前只能求解线性,非线性需要智能算法:退火等。
0-1规划问题,比较常见。
第2部分_Matlab中线性规划的标准型
线性规划的标准型
需要手动去找到这些数据,然后再使用matlab。
AX<=b 如果方向不对,或者符号不是小于等于。
符号要转换为小于等于。(不能是小于)然后再写矩阵或向量
Ps.
也可以对数据进行放松,即取x>=0.0001
matlab 求解线性规划的命令
返回结果为最小值的横坐标x,纵坐标fval
第3部分_求解线性规划的三个小例题 code1.m
详见数学规模模型代码 code1.m
第4部分_线性规划的典型例题_生产决策问题 code2.m
详见数学规模模型代码 code2.m
第5部分_线性规划的典型例题_投料问题 code3.m
详见数学规模模型代码 code3.m
第6部分_Matlab中线性(整数规划)的求解 code7.m
第7部分_整数规划的典型例题_背包问题 code8.m
第8部分_整数规划的典型例题_指派问题 code9.m
第9部分_整数规划的典型例题_钢管切割问题 code10.m
钢管切割。求解代码详见数学规划模型代码
//每根钢管的长度
double length = 6.9;
//截取的钢管的长度
double[] Glength = {2.9,2.1,1};
int countI = (int)(length/Glength[0]);
int countJ = (int)(length/Glength[1]);
int countK = (int)(length/Glength[2]);
int count = 0;//记录方案的个数
for (int i = 0; i <= countI; i++) {
for (int j = 0; j <= countJ; j++) {
for (int k = 0; k <= countK; k++) {
if(2.9*i+2.1*j+k>=6 && 2.9*i+2.1*j+k <=6.9){
count++;
System.out.println("根数:"+i+"_"+j+"_"+k+"," +
"料头长度"+(6.9-i-j-k)+",总计长度:"+(Glength[0]*i+Glength[1]*j+Glength[2]*k));
}
}
}
}
System.out.println("方案的个数:"+count);
/*
根数:0_0_6,料头长度0.9,总计长度:6.0
根数:0_1_4,料头长度1.9,总计长度:6.1
根数:0_2_2,料头长度2.9,总计长度:6.2
根数:0_3_0,料头长度3.9,总计长度:6.3
根数:1_0_4,料头长度1.9,总计长度:6.9
根数:1_1_1,料头长度3.9,总计长度:6.0
根数:2_0_1,料头长度3.9,总计长度:6.8
方案的个数:7
*/
第10部分_Matlab中非线性规划的标准型
第二行:非线性不等式约束,非线性等式约束。
第11部分_fmincon函数的用法 -代码code4/code4.m
x0: 求解局部最优解。初始值x0的选取非常的关键。(通过蒙特卡洛模拟得到蒙特卡洛解,然后将这个解作为初始值。)
option 选项,内点法最好。 数学建模中可以四种都使用,可以看看哪种方法的效果是最好的。
指定算法的方法 详见 code4/code4.m
@fun 表示目标函数(它是求解的函数z ,要求它的最大值或最小值),编写独立的m文件存储目标的函数
@nonlfun 表示非线性部分的约束,编写m文件 存储约束条件
第12部分_求解非线性规划的三个小例题
第13部分_非线性规划的典型例题_选址问题
code5/code5.m
第14部分_非线性规划的典型例题_飞行管理问题
code6.m
第15部分_最大最小化模型 code11.m Fun.m
最不利的条件,寻求最有利的策略。
第16部分_多目标规划问题 code12.m
消除量纲