【数学建模】优化模型——规划模型

【数学建模】优化模型——规划模型本文介绍了数学建模中的优化类问题 重点阐述了规划模型 线性规划 非线性规划 整数规划 最大最小化模型和多目标规划等内容 包括常用的解决算法如单纯形法 fmincon 和 fminimax 以及处理多目标问题的加权组合和敏感性分析方法

大家好,欢迎来到IT知识分享网。

在数学建模中,优化类问题是很常见的一种问题。这种问题里面通常涉及多个变量约束条件,并需要在这些变量和条件之下优化某个函数。最常见的例子就是,“达到最好效果”、“取得最大利润”、“极大降低风险”等等。遇到这类字眼,应首先考虑优化模型求解。

对于优化类模型,又细分为不同的算法来解决问题。常见的算法有:规划模型微分方程模型图论网络优化概率智能优化算法等。其中,规划模型是最基础的模型,是其他算法底层的根本原理,因此要想深入掌握其他模型,首先要学会规划模型。这篇文章就详细介绍一下规划模型。
在这里插入图片描述

1 概述

1.1 什么是数学规划

数学规划是运筹学的一个分支,用来研究:在给定的条件(约束条件)下,如何按照某一衡量指标(目标函数)来寻求计划、管理、工作中的最优方案。通俗来讲就是:求目标函数在一定约束条件下的极值问题

1.2 一般形式

m i n ( o r min(or min(or m a x ) max) max) z = f ( x ) z=f(x) z=f(x)
s . t . ( s u b j e c t s.t.(subject s.t.(subject t o ) to) to) g i ( x ) ≤ 0 , i = 1 , 2 , . . . g_i(x)≤0,i=1,2,… gi(x)0,i=1,2,
其中, x x x决策变量(一般多个), f ( x ) f(x) f(x)目标函数

这样的形式有些抽象,下面详细展开各类数学规划问题。

2 线性规划

目标函数 f ( x ) f(x) f(x)和约束条件均是决策变量的线性表达式——线性规划(Linear Programming)。
举个例子:
在这里插入图片描述
我们使用Matlab中的内置函数linprog来求解,底层实现原理为单纯形法,不做过多展开。这里需要一定的线性代数基础,先来看一下函数原型:


[x, fval] = linprog(c, A, b, Aeq, beq, lb, ub, X0) 

解释一下其参数:

  1. X0表示给定matlab迭代求解的初始值(一般不用给出);
  2. c,A,b,Aeq,beq,lb,ub为标准型,下面详细说明;
  3. 返回值x表示最小值处x的取值,fval表示最优解处取得的最小值;

标准型
在这里插入图片描述

注意事项

  1. 若不存在不等式约束(即 A X ≤ b AX≤b AXb)或等式约束(即 A e q X = b e q AeqX=beq AeqX=beq)可以用”[]“代替A、b、Aeq、beq;
  2. 若某个x无下界或上界,可以用-inf(无穷小)和inf(无穷大)来约束;
  3. 不是所有问题都有唯一解,可能无解有无穷多解
  4. 如果求的是 m a x max max,可以先将目标函数两侧取负号化为标准型 m i n min min,再进行求解。

根据标准型,给出上面例子的matlab代码:

clear; clc c = [-5 -4 -6]'; % '表示转置 A = [1, -1, 1 3, 2, 4 3, 2, 0]; b = [20 42 30]'; lb = [0 0 0]'; [x fval] = linprog(c, A, b, [], [], lb) % ub作为缺省参数,可以省略 

运行即可得到结果:最小值fval为-78

3 非线性规划

[x, fval] = fmincon(@fun, X0, A, b, Aeq, beq, lb, ub, @nonlfun, option) 

注意事项

  1. 非线性规划中初始值X0的选取非常重要,因为其算法最终得到的是一个局部最优解
  2. 要求解全局最优解,建议使用蒙特卡罗模拟得到一个蒙特卡罗解,然后用这个解作为初始值来求全局最优解;
  3. option选项可以给定求解的算法,一共有四种:interior-point(内点法);SQP(序列二次规划法);active-set(有效集法)以及trust-region-reflective(信赖域反射算法),各有各的优点,建议都都尝试一下
  4. @fun表示目标函数,需要编写一个独立的文件来存储目标函数:
    function f = fun(X) % f = ... end 
  5. @nonlfun表示非线性约束部分,同样需要编写一个独立文件:
    function [C, Ceq] = nonlfun(X) % C = [非线性不等式约束1; ... 非线性不等式约束n;] % Ceq = [非线性等式约束1; ... 非线性等式约束m;] end 

标准型
在这里插入图片描述
根据标准型,给出上面matlab代码:

% 文件fun.m function f = fun(x) f = -x(1) ^ 2 - x(2) ^ 2 + x(1) * x(2) + 2 * x(1) + 5 * x(2); end % 文件nonlfun.m function [c, ceq] = nonlfun(x) c = [(x(1) - 1) ^ 2 - x(2)]; ceq = []; % 不存在非线性等式约束 end % 文件main.m clear; clc format long g x0 = [0, 0]; % 这里为了简便,随机给定一个初始值 A = [-2 3]; b = 6; [x, fval] = fmincon(@fun, x0, A, b, [], [], [], [], @nonlfun) fval = -fval 

运行即可求解fval近似为-1。

改变求解算法的代码

% 以内点法为例 option = optimoptions('fmincon','Algorithm','interior-point') 

4 整数规划

整数规划即为对数学规划加上变量取值必须为整数这一约束条件。其中,有线性整数规划和非线性整数规划两种问题。对于非线性整数规划,没有特定的算法来求解,只能使用近似算法(蒙特卡罗模拟、智能算法等),这里主要讲述线性整数规划。

对于线性整数规划,我们使用matlab内置函数intlinprog进行求解。其函数原型为:

[x, fval] = intlinprog(c, intcon, A, b, Aeq, beq, lb, ub) % 新版还有初始值参数X0,可以不指定 

其参数含义和linprog类似,唯一不同的是intcon参数可以指定哪些变量是整数
例如:

% x1, x2, x3 其中x1,x3是整数 intcon = [1, 3]; 

0-1规划即在整数规划的基础上,变量取值只有0或1。典型例子为0-1背包问题,感兴趣的同学可以自行查阅相关题目。求解方法也很简单,只需要对约束变量的上下界设置为 [ 0 , 1 ] [0,1] [0,1]即可

由于整数规划求解函数和线性规划非常类似,这里就不进行例题演示。

5 最大最小化模型

[x, fval] = fminimax(@Fun, X0, A, b, Aeq, beq, lb, ub, @nonlfun, option); 

其函数参数和非线性规划函数fmincon类似,唯一不同的是第一个参数@Fun,代表目标函数 f 1 ( x ) , f 2 ( x ) , . . . , f m ( x ) f_1(x),f_2(x),…,f_m(x) f1(x),f2(x),,fm(x),其作为一个向量表示,代码操作如下:

function f = Fun(x) f = zeros(m, 1) % f(1) = ... % f(2) = ... % ... % f(m) = ,,, end 

6 多目标规划

顾名思义,即在一个规划问题中有多个目标。这种情况下,我们需要对多木雕进行加权组合,把问题转化为单目标规划。举个例子:工厂生产时,既要考虑利润,也要考虑污染

注意事项

  1. 要将多个目标函数统一为最大化或最小化问题才可以进行加权组合
  2. 注意量纲问题,多个函数由于量纲不同,不能直接加权。例如,污染指标和利润指标明显不是一个数量级。常用做法是:用目标函数除以某一个常量,该常量是目标函数的一个取值,根据经验确定

下面还有重要的一步就是进行敏感性分析。敏感性分析指的是从定量分析的角度研究有关因素发生变化对某一个或一组关键指标影响程度的一种不确定分析技术。说白了就是改变相关变量的数值来解释关键指标受影响大小的规律
在这个问题中,我们需要改变 f 1 f_1 f1 f 2 f_2 f2的权重,来观察对结果的影响。这里我们逐渐改变其权重,记录得到的 x 1 x_1 x1 x 2 的值 x_2的值 x2的值,最终得到的图像(代码部分交给大家自己实现):
在这里插入图片描述

根据我们得到的结果,发现在0.333到0.334发生了突变,最后结合实际问题做出解释即可。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118253.html

(0)
上一篇 2025-11-14 16:00
下一篇 2025-11-14 16:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信