当前位置: 首页 > news >正文

数学建模·非线性规划

整型规划

适用于一个变量或多个变量的值只能是整型的情况

整形规划的分类

0-1背包问题

对于一个物品来说,只有选和不选两种情况
表现为单下标,单变量问题

例:建设学校问题
在这里插入图片描述

  • 对于每个学校来说只有选和不选两种情况,在数学上我们用0-1变量来表示
    在这里插入图片描述

  • 约束条件如下
    例如对于A1来说,至少从x1,x2,x3中选择至少建设一所,反映在数学上就是0-1变量和>=1
    在这里插入图片描述

蒙特卡洛模拟代码

%% 蒙特卡洛建校问题
clear;clc;
n=10000;
res_min=+inf;
rex_x=0;
for i=1:nx=randi([0,1],1,6);if x(1)+x(2)+x(3)>=1&x(4)+x(5)>=1&x(3)+x(5)>=1&x(2)+x(4)>=1&x(5)+x(6)>=1&x(1)>=1if sum(x)<res_minres_min=sum(x);res_x=x;endend
end
disp("最终结果为");
disp(res_x);
disp(res_min);

指派问题

例:工厂的设备分配问题
在这里插入图片描述

拥有两个对象,将i指派给j,所以是双下标问题
类似于0-1背包问题,我们用带两个下标0-1向量表示问题
在这里插入图片描述

代码如下

%% 蒙特卡洛工厂分配问题
clear;clc;
n=10000;
c=[4,2,3,4;6 4 5 5; 7 6 7 6; 7 8 8 6;7 9 8 6;7 10 8 6];
res_x=0;
res=0;
for i=1:nflag=1;x=randi([1,4],1,6);for j=1:4if ismember(j,x)==0flag=0;break;endendsum=0;if flag==1for k=1:6sum=sum+c(k,x(k));endif sum>resres=sum;res_x=x;endend
end
disp("结果如下");
disp(res);
disp(res_x);

具体步骤

  • matlab具体函数求解
    在这里插入图片描述
  • 蒙特卡洛模拟

本质上是使用随机数不断模拟逼近最优解的形式
具体问题具体分析

非线性规划

在这里插入图片描述

具体定义

对于目标函数或约束条件不是线性的情况求极值

具体步骤

步骤如下,基本上就是填参数
在这里插入图片描述

代码模板

唯一要注意的点是f和nonlfun函数中的格式:

  • f函数

参数可以理解为x作为行向量,直接用行向量表示目标函数最后返回就行!

function[f]=f(x)%x一般指行向量,f是指函数f=x(1)^2+x(2)^2+x(3)^2+8;
end
  • nonlfun函数

这里有两个返回值ciq和ceq,第一个是不等式,第二个是等式
注意都要化为 =右侧为0的形式!

function[ciq,ceq]=nonlfun(x)%c是非线性不等式,ceq是等式
%等式或者不等式右侧必须都是0ciq=[x(1)+x(2)^2+x(3)^3-20];ceq=[-x(1)-x(2)^2+2];
end
  • 总模板如下
%% 非线性规划模板
clear;clc;
%matlab中的非线性规划只能解决最小值问题
%约束条件缺失用[]代替
%约束不等式Ax<=bdisp("现在开始进行非线性规划,请按照要求输入");
%disp("以下对应矩阵的维度均与原公式相同");
disp("请提前定义好非线性函数f和非线性约束nonlfun!")
x0=input("请以行向量形式输入初值\n");
A=input("请输入线性不等式的系数矩阵A\n");
b=input("请输入线性常向量b\n");
Aeq=input("请输入线性等式的系数矩阵Aeq\n");
beq=input("请输入线性等式的常向量beq\n");
lb=input("请以列向量形式输入对应的下界\n");
ub=input("请以列向量形式输入对应的上界\n");
[x,val]=fmincon(@f,x0,A,b,Aeq,beq,lb,ub,@nonlfun);
display(x);
display(val);
http://www.lryc.cn/news/399930.html

相关文章:

  • SpringCloud第三篇(服务中心与OpenFeign)
  • Linux重要知识点
  • Unity宏和编辑器
  • 计算机网络——网络层(概念及IP地址划分)
  • 【JVM实战篇】内存调优:内存泄露危害+内存监控工具介绍+内存泄露原因介绍
  • CVE漏洞爬虫脚本
  • 如何搭建互联网医院系统源码?医疗陪诊APP开发实战详解
  • 高通平台android的Framework开发遇到的一些问题总结
  • 基于modbus tcp通讯的雷赛导轨控制器调试软件
  • 阿里云产品流转
  • GO语言中的接口(interface)
  • 模拟电路再理解系列(2)-电源滤波电路
  • uniapp使用多列布局显示图片,一行两列
  • 近期几首小诗汇总-生活~卷
  • 超时导致SparkContext构造失败的问题探究
  • 【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)
  • Nginx 负载均衡详解
  • Unity3D开发之传送带实现
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(二)-支持高分辨率视频直播应用
  • python的私有属性和数据封装
  • 一文学会鉴别“套壳”ChatGPT模型
  • Docker基本管理1
  • python-28-零基础自学python-json存数据、读数据,及程序合并
  • Excel第30享:基于辅助列的条件求和
  • Java查看RSA密钥的ASN1结构
  • 友思特方案 | 低延迟GigE Vision解决方案:用于红外设备、医疗和工业级探测面板
  • 网络安全策略:优先防护而非溯源的重要性
  • ES6 Iterator 与 for...of 循环(五)
  • typora删除多余图片
  • 【ceph】ceph-mon重新选举的情况