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

数学建模学习(7):单目标和多目标规划

优化问题描述

优化

优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值

线性规划

线性规划是指目标函数和约束都是线性的情况

[x,fval]=linprog(f,A,b,Aeq,Beq,LB,UB)
x:求得最优情况下变量的解
fval:求得最优目标值
f:目标函数的系数(符号按最小值标准,若目标是求解机大值可以通过添加负号改成求极小值)
A:不等式约束的变量系数(符合按小于标准,如果是大于约束可通过加负号变成小于)
b:不等式约束的常量
Aeq:等式约束的变量系数Beq:等式约束的常量LB:变量的下限UB:变量的上限

%% 线性规划
clc;clear;close all;
%目标函数/max 要改成min 的形式,max最大值可以系数加个负号的变成求min
f=[-1;-2;3];   %不等约束  /化成标准形式   x1+x2<=
% -x1-x2+0*x3<=-3
%0*x1-x2-x3<=-3
A=[-1,-1,0;0,-1,-1];%左边特征矩阵
b=[-3;-3]; %右边%等式约束
Aeq=[1,0,1];  
Beq=[4];%变量约束,上限,下限
LB=zeros(3,1);
UB=2*ones(3,1);%优化
[x,fval]=linprog(f,A,b,Aeq,Beq,LB,UB);
%
objstr=['目标函数最优值:',num2str(fval)];
disp(objstr)
for i=1:length(x)xstr=['x',num2str(i),'的值为:',num2str(x(i))];disp(xstr)
end

非线性规划

非线性规划是指目标函数和约束有非线性的情况

 

%% 非线性规划1
clc;clear;close all;
%初始解,随意给个初始解
x0=zeros(3,1);%不等约束
A=[2,1,3];%左边特征矩阵
b=[6]; %右边%描述线性 
%等式约束
Aeq=[];
Beq=[];%变量约束,上限,下限
LB=zeros(3,1);
UB=1*ones(3,1);%
%优化求解 max 加负号  
fun = @(x)-x(1)^2+x(2)^2-x(2)*x(3);
%
nonlcon = @unitdisk;
[x,fval]=fmincon(fun,x0,A,b,Aeq,Beq,LB,UB,nonlcon);objstr=['目标函数最优值:',num2str(-fval)];%num2str 数字变成字符
disp(objstr)
for i=1:length(x)xstr=['x',num2str(i),'的值为:',num2str(x(i))];disp(xstr)
endfunction [c,ceq] = unitdisk(x)
%c为不等式非线性约束
%ceq为等式非线性约束
c=x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6;
%多个非线性约束的话,可以用[约束1;约束2];
ceq = [];
end%%
%遇到较为复杂的目标函数
%可以写为函数的形式
fun = @obj;
function y = obj(x)y1 = x(1)^2+x(2)^2;y = sqrt(y1)+x(3)^3;
end
%%

多目标优化

 

多目标求解的第一种方法:

%% 非线性规划1
clc;clear;close all;
%%
%初始解,随意给个初始解
x0=zeros(3,1);%不等约束
A=[2,1,3];%左边特征矩阵
b=[6]; %右边%等式约束
Aeq=[];
Beq=[];%变量约束,上限,下限
LB=zeros(3,1);
UB=1*ones(3,1);
%优化求解
%%
w1=0.5;w2=0.5;
fun = @(x)(-x(1)^2+x(2)^2-x(2)*x(3))*w1+(2*x(1)^2-x(2)^3+2*x(2)*x(3))*w2;nonlcon = @unitdisk;
[x1,fval1]=fmincon(fun,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目标函数最优值:',num2str(fval1)];
disp(objstr)
for i=1:length(x1)xstr=['x',num2str(i),'的值为:',num2str(x1(i))];disp(xstr)
endfunction [c,ceq] = unitdisk(x)
%c为不等式非线性约束
%ceq为等式非线性约束
c=x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6;
ceq = [];
end

多目标求解的第二种方法

%% 非线性规划1
clc;clear;close all;
%%
%初始解,随意给个初始解
x0=zeros(3,1);%不等约束
A=[2,1,3];%左边特征矩阵
b=[6]; %右边%等式约束
Aeq=[];
Beq=[];%变量约束,上限,下限
LB=zeros(3,1);
UB=1*ones(3,1);
%优化求解
%%
fun1 = @(x)-x(1)^2+x(2)^2-x(2)*x(3);
fun2 = @(x)2*x(1)^2-x(2)^3+2*x(2)*x(3);
%%
nonlcon = @unitdisk;
[x1,fval1]=fmincon(fun1,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目标函数最优值:',num2str(fval1)];
disp(objstr)
for i=1:length(x1)xstr=['x',num2str(i),'的值为:',num2str(x1(i))];disp(xstr)
end
[x2,fval2]=fmincon(fun2,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目标函数最优值:',num2str(fval2)];
disp(objstr)
for i=1:length(x2)xstr=['x',num2str(i),'的值为:',num2str(x2(i))];disp(xstr)
end
%% 多目标规划
goal=[fval1,fval2];
func = @(x)[-x(1)^2+x(2)^2-x(2)*x(3);2*x(1)^2-x(2)^3+2*x(2)*x(3)];
weight=[1,1];
[x,fival]=fgoalattain(func,x0,goal,weight,A,b,Aeq,Beq,LB,UB,nonlcon);
disp('在两个目标的优化结果为')
disp(func(x))
for i=1:length(x)xstr=['x',num2str(i),'的值为:',num2str(x(i))];disp(xstr)
end
%%
function [c,ceq] = unitdisk(x)
%c为不等式非线性约束
%ceq为等式非线性约束
c=x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6;
ceq = [];
end

 

%% 非线性规划1
clc;clear;close all;
%%
%初始解,随意给个初始解
x0=zeros(10,1);%不等约束
A=[];%左边特征矩阵
b=[]; %右边%等式约束
Aeq=[];
Beq=[];%变量约束,上限,下限
LB=-1*ones(10,1);LB(1)=0;
UB=1*ones(10,1);
%优化求解
%%
fun1 = @obj1;
fun2 = @obj2;
%%
nonlcon = [];
[x1,fval1]=fmincon(fun1,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目标函数最优值:',num2str(fval1)];
disp(objstr)
for i=1:length(x1)xstr=['x',num2str(i),'的值为:',num2str(x1(i))];disp(xstr)
end
[x2,fval2]=fmincon(fun2,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目标函数最优值:',num2str(fval2)];
disp(objstr)
for i=1:length(x2)xstr=['x',num2str(i),'的值为:',num2str(x2(i))];disp(xstr)
end
%% 多目标规划
goal=[fval1,fval2];
func = @obj3;
weight=[1,1];
[x,fival]=fgoalattain(func,x0,goal,weight,A,b,Aeq,Beq,LB,UB,nonlcon);
disp('在两个目标的优化结果为')
disp(func(x))
for i=1:length(x)xstr=['x',num2str(i),'的值为:',num2str(x(i))];disp(xstr)
end
%%
function y1=obj1(x)[dim, num]  = size(x);tmp         = zeros(dim,num);tmp(2:dim,:)= (x(2:dim,:) - sin(6.0*pi*repmat(x(1,:),[dim-1,1]) + pi/dim*repmat((2:dim)',[1,num]))).^2;tmp1        = sum(tmp(3:2:dim,:));  % odd indextmp2        = sum(tmp(2:2:dim,:));  % even indexy1      = x(1,:)             + 2.0*tmp1/size(3:2:dim,2);
%     y(2,:)      = 1.0 - sqrt(x(1,:)) + 2.0*tmp2/size(2:2:dim,2);
end
function y2=obj2(x)[dim, num]  = size(x);tmp         = zeros(dim,num);tmp(2:dim,:)= (x(2:dim,:) - sin(6.0*pi*repmat(x(1,:),[dim-1,1]) + pi/dim*repmat((2:dim)',[1,num]))).^2;tmp1        = sum(tmp(3:2:dim,:));  % odd indextmp2        = sum(tmp(2:2:dim,:));  % even index
%     y2      = x(1,:)             + 2.0*tmp1/size(3:2:dim,2);y2      = 1.0 - sqrt(x(1,:)) + 2.0*tmp2/size(2:2:dim,2);
end
function y=obj3(x)[dim, num]  = size(x);tmp         = zeros(dim,num);tmp(2:dim,:)= (x(2:dim,:) - sin(6.0*pi*repmat(x(1,:),[dim-1,1]) + pi/dim*repmat((2:dim)',[1,num]))).^2;tmp1        = sum(tmp(3:2:dim,:));  % odd indextmp2        = sum(tmp(2:2:dim,:));  % even indexy(1,:)      = x(1,:)             + 2.0*tmp1/size(3:2:dim,2);y(2,:)      = 1.0 - sqrt(x(1,:)) + 2.0*tmp2/size(2:2:dim,2);
end
% function [c,ceq] = unitdisk(x)
% %c为不等式非线性约束
% %ceq为等式非线性约束
% c=x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6;
% ceq = [];
% end

相关文章:

数学建模学习(7):单目标和多目标规划

优化问题描述 优化 优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 线性规划 线性规划是指目标函数和约束都是线性的情况 [x,fval]linprog(f,A,b,Aeq,Beq,LB,U…...

Element UI如何自定义样式

简介 Element UI是一套非常完善的前端组件库&#xff0c;但是如何个性化定制其中的组件样式呢&#xff1f;今天我们就来聊一聊这个 举例 就拿最常见的按钮el-button来举例&#xff0c;一般来说默认是蓝底白字。效果图如下 可是我们想个性化定制&#xff0c;让他成为粉底红字应…...

protobuf入门实践2

如何在proto中定义一个rpc服务? syntax "proto3"; //声明protobuf的版本package fixbug; //声明了代码所在的包 &#xff08;对于C来说就是namespace)//下面的选项&#xff0c;表示生成service服务类和rpc方法描述&#xff0c; 默认是不生成的 option cc_generi…...

adb shell使用总结

文章目录 日志记录系统概览adb 使用方式 adb命令日志过滤按照告警等级进行过滤按照tag进行过滤根据告警等级和tag进行联合过滤屏蔽系统和其他App干扰&#xff0c;仅仅关注App自身日志 查看“当前页面”Activity文件传输截屏和录屏安装、卸载App启动activity其他 日志记录系统概…...

UG NX二次开发(C++)-Tag的含义、Tag类型与其他的转换

文章目录 1、前言2、Tag号的含义3、tag_t转换为int3、TaggedObject与Tag转换3.1 TaggedObject定义3.2 TaggedObject获取Tag3.3 根据Tag获取TaggedObject4.Tag与double类型的转换1、前言 在UG NX中,每个对象对应一个tag号,C++中,其类型是tag_t,一般是5位或者6位的int数字,…...

Informer 论文学习笔记

论文&#xff1a;《Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting》 代码&#xff1a;https://github.com/zhouhaoyi/Informer2020 地址&#xff1a;https://arxiv.org/abs/2012.07436v3 特点&#xff1a; 实现时间与空间复杂度为 O ( …...

c语言位段知识详解

本篇文章带来位段相关知识详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#xff01;&#xff01; 目录 一.什么是…...

FFmpeg aresample_swr_opts的解析

ffmpeg option的解析 aresample_swr_opts是AVFilterGraph中的option。 static const AVOption filtergraph_options[] {{ "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS,{ .i64 AVFILTER_THREAD_SLICE }, 0, INT_MA…...

CAN学习笔记3:STM32 CAN控制器介绍

STM32 CAN控制器 1 概述 STM32 CAN控制器&#xff08;bxCAN&#xff09;&#xff0c;支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误&#xff0c;而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。 2 bxCAN 特性 波特率…...

软工导论知识框架(二)结构化的需求分析

本章节涉及很多重要图表的制作&#xff0c;如ER图、数据流图、状态转换图、数据字典的书写等&#xff0c;对初学者来说比较生僻&#xff0c;本贴只介绍基础的轮廓&#xff0c;后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法&#xff1a;结构化的分析、设计、…...

[SQL挖掘机] - 算术函数 - abs

介绍: 当谈到 SQL 中的 abs 函数时&#xff0c;它是一个用于计算数值的绝对值的函数。“abs” 代表 “absolute”&#xff08;绝对&#xff09;&#xff0c;因此 abs 函数的作用是返回一个给定数值的非负值&#xff08;即该数值的绝对值&#xff09;。 abs 函数接受一个参数&a…...

vue拼接html点击事件不生效

vue使用ts&#xff0c;拼接html&#xff0c;点击事件不生效或者报 is not defined 点击事件要用onclick 不是click let data{name:测,id:123} let conHtml <div> "名称&#xff1a;" data.name "<br>" <p class"cursor blue&quo…...

【Spring】Spring之依赖注入源码解析

1 Spring注入方式 1.1 手动注入 xml中定义Bean&#xff0c;程序员手动给某个属性赋值。 set方式注入 <bean name"userService" class"com.firechou.service.UserService"><property name"orderService" ref"orderService"…...

【微软知识】微软相关技术知识分享

微软技术领域 一、微软操作系统&#xff1a; 微软的操作系统主要是 Windows 系列&#xff0c;包括 Windows 10、Windows Server 等。了解 Windows 操作系统的基本使用、配置和故障排除是非常重要的。微软操作系统&#xff08;Microsoft System&#xff09;是美国微软开发的Wi…...

12.python设计模式【观察者模式】

内容&#xff1a;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变的时候&#xff0c;所有依赖于它的对象得到通知并被自动更新。观者者模式又称为“发布-订阅”模式。比如天气预报&#xff0c;气象局分发气象数据。 角色&#xff1a; 抽象主题&#xf…...

重生之我要学C++第五天

这篇文章主要内容是构造函数的初始化列表以及运算符重载在顺序表中的简单应用&#xff0c;运算符重载实现自定义类型的流插入流提取。希望对大家有所帮助&#xff0c;点赞收藏评论&#xff0c;支持一下吧&#xff01; 目录 构造函数进阶理解 1.内置类型成员在参数列表中的定义 …...

复习之linux高级存储管理

一、lvm----逻辑卷管理 1.lvm定义 LVM是 Logical Volume Manager&#xff08;逻辑卷管理&#xff09;的简写&#xff0c;它是Linux环境下对磁盘分区进行管理的一种机制。 逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动&#xff0c;是在内核中块设备和物理设备…...

HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face

总述 HuggingGPT 让LLM发挥向路由器一样的作用&#xff0c;让LLM来选择调用那个专业的模型来执行任务。HuggingGPT搭建LLM和专业AI模型的桥梁。Language is a generic interface for LLMs to connect AI models 四个阶段 Task Planning&#xff1a; 将复杂的任务分解。但是这里…...

java工程重写jar包中class类覆盖问题

结论&#xff1a;直接在程序中复写jar中的类即可 原因&#xff1a;一般我java工程是运行在tomcat容器中&#xff0c;tomcat容易在加载我们工程类和jar包是的优先级为&#xff1a; 我们工程的class 先于 我们工程lib下的jar 重复的类只加载一次&#xff0c;加载我们复写后的类后…...

Mybatis基于注解与XML开发

文章目录 1 关于SpringBoot2 关于MyBatis2.1 MyBatis概述2.2 MyBatis核心思想2.3 MyBatis使用流程3 MyBatis配置SQL方式3.1 基于注解方式3.1.1 说明3.1.2 使用流程3.1.3 常用注解 3.2 基于XML方式3.2.1 相比注解优势3.2.2 使用流程3.2.3 常用标签 1 关于SpringBoot SpringBoot…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

背包问题双雄:01 背包与完全背包详解(Java 实现)

一、背包问题概述 背包问题是动态规划领域的经典问题&#xff0c;其核心在于如何在有限容量的背包中选择物品&#xff0c;使得总价值最大化。根据物品选择规则的不同&#xff0c;主要分为两类&#xff1a; 01 背包&#xff1a;每件物品最多选 1 次&#xff08;选或不选&#…...