这波知识点分享可得接稳了!非线性模型线性化方法技巧!

现在电力系统优化方向的文章几乎都要提及将非线性模型线性化,使用的方法大致可包括分段线性化(最基础),混合整数线性化方法,绝对值法,大M方法,关于非线性模型线性化方法的文章和推文介绍也数不胜数,本文在阅读大量线性化方法文章的基础上,总结出一篇较为基础的非线性模型线性化方法,旨在用白话文说清如何进行模型线性化,让读者真正明白什么是线性化,话不多说,请看图文!

首先说一下求解线性规划问题最为成熟的方法:单纯形法!

单纯形法由乔治·丹齐格(George Dantzig)于1947年提出,是解决线性规划问题的一种经典算法。单纯形法是一种用于求解线性规划问题的数学方法。线性规划是一种数学优化技术,用于在给定约束条件下最大化或最小化线性目标函数。

单纯形法的基本思想是从一个可行解开始,通过不断移动解空间中的顶点(角点)来搜索最优解,即沿着规划区域约束的交界点搜寻。算法选择一个非基本变量进入基本变量集,同时将一个基本变量离开基本变量集,以改善目标函数的值,直到找到最优解。尽管单纯形法是一个有效的算法,但对于某些特定类型的线性规划问题,它可能不够高效。可实际在科研建模时,目标函数或是约束条件,极大概率会出现非线性的形式,下面就引出为什么要进行非线性模型线性化。

此时若选择采用启发式算法(遗传算法、模拟退火算法、粒子群算法等)求解,有很大概率会陷入局部最优解,相当于放弃了求精确解,也放弃了投Top期刊的机会。因此,了解并懂得何种形式可以转化为线性和如何线性化,It is important!

授人以鱼不如授人以渔!首先,解决如何线性化的问题可以翻书、百度或查看本文;但若不知道何种非线性数学形式可以转化为线性模型,还是等于不会;在经过诸多小伙伴的交流和广泛调研后,在解决较为复杂的非线性问题时,主要会面临以下两大类问题:

针对以上两个问题,本文指出(敲黑板!!!):

具有分段函数形式、绝对值函数形式、最小/大值函数形式、逻辑或形式、含有0-1变量的乘积形式、混合整数形式以及分式目标函数,均可实现线性化。而线性化的主要手段其实就两点:一是引入0-1变量,二是引入很大的整数M。灵活运用这两点可以解决优化方向绝大部分的非线性问题。

其中巧妙,独躬身推演方能知晓!

下面详细说明每种问题的线性化方法:

1. 分段函数

分段函数表达式:

线性化结果:

其中,y是引入的辅助0-1变量,M是一个很大的整数,一般取值1+10e6。简单通过分类讨论y=0和y=1便能理解上述式子的含义。

举例说明:

线性化处理结果:

当x=3时,f(x)取最小值-0.25。

2. 绝对值函数

举例:要求线性化如下数学模型

方法1:用yi代替绝对值部分

注意,yi=|xi|的本质数学含义其实就是:yi≥xi和yi≥-xi。这个数学思想非常重要,可以解决很多有关绝对值的问题。

方法2:用ui、vi代替

这种方法没有那么直观,以后看到绝对值问题,脑海中有这种思路就好啦。

高中或是高数课上学过如下定理:

则之前的数学模型可以线性化为:

举例说明:

证明:

将左边|xi|转化为ui+vi,x转化为u-v。注意,这里的x是向量,对于x下标中的每个i都是成立的,可不能以为只有一个约束条件。

3. MaxMin/MinMax函数

以下图上半部分的MaxMin函数为例:基于k项minCX函数的值(矩阵写法,省略了求和号,不方便打转置符号),再取其中的最大值。

该形式下的线性化方法是:用z替代minCX函数,这样z便≤CX,又由目标函数是取最大的z,从而限制住z 不会无限小下去,而只会取满足条件的z。图中下半部分的MinMax函数同理。

这种情况类似于高数中的夹逼定理(判断极限是否存在),进一步也可能意识到,如果换为MaxMax和MinMin函数,以上这套思路就行不通了。

举例说明:

目标函数:

线性化结果:

实际也确实是这样,线性化MaxMax和MinMin函数较为复杂一些,需要借助下面第四点线性化逻辑或的思维。

4. 逻辑或

该部分主要针对约束条件(含有逻辑或)的线性化操作。通常,逻辑或两端的约束存在三种情形。

情形1.1:逻辑或两段均为≤,即:

此时线性化方法为:

情形1.2:逻辑或两边均为≥,即:

线性化结果:

情形1.3:逻辑或两段一边≤,一边≥,即:

线性化结果:

引入u 和v 两个0-1变量和大M。分类讨论u和v取0或1的四种情形便能理解以上过程。思路非常巧妙,希望大家多悟几遍并消化。

这里情形1讲了3种情形,大家理解了这个逻辑,第四种"一边≤一边≥"的情形想必大家总结规律也可以得到,线性化思路是类似的。这里总结句口诀:大减小加。含义是:

只要用了大于等于,后面M前面的符号一定是减号;

只要用了小于等于,后面M前面的符号一定是加号。

情形2:一端为≤,一端为=,即:

此时线性化方法为:

可见,多添加一个≥的式子即可。同理,“一端为≥,一端为=”、“一端为=,一端为≤”和“一端为=,一端为≥”的三种情况也可以相应得到,这里不再赘述。

情形3:两端均为=,即:

此时线性化方法为:

可见,逻辑或是通过新引入的两个0-1变量u和v来控制的,感叹此中巧妙!

5. MaxMax/MinMin函数

该部分需要运用上述技巧逻辑或。以MaxMax函数为例:

首先,令z=maxCX,但若此时约束条件写成z≥CX的形式是不行的,因为这样会让z取值到无穷大,故一定要写出“z≤某个值”的形式。

这时,就需要引入0-1变量和大M,如上式所示。yk求和≥1的含义是“至少有一个成立”。实际计算时,只会有一个k让yk=1,其余yk为0。具体原因,也是夹逼定理的思想,大家多多领会。

同理,MinMin函数的线性化过程如下。

注意,这里是加号。yk=0该约束不起作用,只有当yk=1时才会起作用。

举例说明:

目标函数:

线性化结果:

6. 含有0-1变量的乘积形式

众所周知,决策变量(连续型)乘以决策变量(连续型)即为二次型,是非线性的,在电力系统中类似于设备的投切状态。该形式无法转化为线性。

但如果将其中一个(或两个)连续型变量改为0-1变量,此时是可以进行线性化操作的。

设该非线性形式为y=x1*x2,根据x1、x2两个变量的取值范围不同,会存在以下三种情形:

情形1:x1、x2均为0-1变量

分析y=x1*x2不同取值下的计算结果如下:

总结表中呈现的规律,有:

这里很巧妙地提出变量y也为0-1变量,然后通过变量x来限制其上下界。

依此类推,大家也可以试试x1、x2、y取其他0-1对应值时的线性化构造方法。

情形2:x1为0-1变量,x2取值范围为[0,a]

同样试着计算出取值表:

总结表中呈现的规律,有:

第一个和最后一个约束主要为了限定 y 的范围属于[0, a]。第三个约束是最为巧妙的,要限制 y 的范围,必须还要写出“y ≥ 某值”的形式。该思想是需要大家领悟消化的。

情形3:x1为0-1变量,x2取值范围为[a,b]

同样试着计算出取值表:

总结表中呈现的规律,有:

其中,M可以是任意正值,因为该约束只有在x1=1时才起作用,而此时M(1-x1)=0。

7. 分式目标函数形式

原优化问题形式:

Step1:令

带入上面可得:

再令z=xy代入上式可得:

举例说明:

观察上式,只有目标函数为分式(非线性)。除法形式在数学上通常是不受欢迎,此时可以考虑转化为乘法形式。即令:

则目标函数转化为:

观察如上形式,又出现新的非线性函数:xz和yz。此时若令xz=u,yz=v,则约束条件也需要做出相应的改变(约束两边同乘z):

可见,分式目标函数的线性化有两个步骤。一是将分母的倒数设置为新的线性参数;二是令非线性的xz 和 yz 等于新的线性参数。

该方法对分式函数具有普适性,巧妙且简单。

8. Max/Min函数

该形式虽较为常见,但其线性化方法却不那么直观。

以z=max(x,y)为例。很容易可以写出约束z≥x和z≥y。但显然这是不够的,因为该约束只约束了z的下界,未约束上界。

上界的约束可以转化为逻辑或的表述法,即:x≥z或y≥z成立。

下面介绍逻辑或两端均为≤,即:

此时线性化方法为:

此时,需引入0-1变量u、v且u+v=1,和大M来实现逻辑或的线性化,具体地:

同理,Min函数的线性化方法如下:

消化吸收以上思想后,扩展如何进行z=max(x, y, 10)的三个最值函数如何线性化:

线性化结果为:

9. 混合整数变量线性化

这里提到的混合整数指的是:某变量是整数或者是连续变量。如下:

此时,只需要用另两个变量x和y代替z即可。

基于此,构造如下的线性化方法:

不知大家发现没有,该方法也是非常巧妙的,没有直接借鉴逻辑或的线性化思路,而是仅通过引入一个0-1变量u实现。

当u=0时,前两个约束不起作用,后两个约束起作用,使得z=y;当u=1时,后两个约束不起作用,前两个约束起作用,使得z=x。

10.  含半连续变量问题

考虑约束如下:x=0或者a≤x≤b

线性化结果为:

该变量常用于带有fixed cost形式的目标函数或者约束上。

11. if-then

If 成立,then 成立

线性化结果为:

归纳而言:

(1)了解并懂得何种非线性数学形式可以线性化比知道如何转化更重要;

(2)线性化方法的主要思路是引入0-1变量和大M的方法,将等式约束转化为不等式约束。至于构造时是采用≥还是≤,是加还是减的形式(指±M(1±y),熟能生巧。

至此,介绍了11种非线性数学形式的线性化方法/技巧。如果大家了解还有其他的数学形式也可以线性化欢迎私信交流讨论,总结后再分享给大家。

感谢ZH博主《科研小飞》对本推文的大力支持!

最后,祝大家paper库库发!

参考文献:

1. https://zhuanlan.zhihu.com/p/552076713

2.https://blog.csdn.net/weixin_40730979/article/details/135321203?spm=1001.2014.3001.5502

3. https://blog.csdn.net/HsinglukLiu?type=blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA AQS源码深度讲解和分析

为方便理解,本文章以非公平锁ReentrantLock()为例作为突破讲解方法lock。 前置知识:JAVA AQS源码分析前置知识-CSDN博客 ReentrantLock的原理 Lock接口的实现类,基本都是通过聚合了一个队列同步器的子类完成线程访问控制的 从最简单的lock方…

C语言————结构体

接下来我们来了解C语言中很重要的内容:结构体。虽然到现在我们可以创建常量,变量,数组,但是存储的都是相同类型的数据,如果我们需要写入不同数据类型的信息怎么办,例如常见的身份证上的信息,有身…

springboot+vue+mysql+easyexcel实现文件导出+导出的excel单元格添加下拉列表

Excel导出 EasyExcel官方文档 官方文档本身写的非常详细,我就是根据官方文档内的写Excel里web中的写实现的导出 后端 对象 需要写一个实体类 其中涉及到一些用到的EasyExcel的注解 ColumnWidth(20) 列宽设为20,自定义的,放在实体类上面是…

JavaWeb——005 -- 请求响应 分层解耦(Postman、三层架构、IOC、DI、注解)

目录 一、请求 1、Postman(接口测试工具) 1.1、介绍 ②、安装 2、简单参数 1.1、原始方式 1.2、SpringBoot方法 ③、小结 3、实体参数 3.1、简单实体对象 3.2、复杂实体对象 3.3、小结 4、数组集合参数 ①、数组​编辑 ②、集合 ③、小结…

Alist访问主页显示空白解决方法

文章目录 问题记录问题探索和解决网络方案问题探究脚本内容查看 最终解决教程 问题记录 访问Alist主页显示空白,按F12打开开发人员工具 ,选择控制台,报错如下 index.75e31196.js:20 Uncaught TypeError: Cannot assign to read only property __symbo…

python|闲谈2048小游戏和数组的旋转及翻转和转置

目录 2048 生成数组 n阶方阵 方阵旋转 顺时针旋转 逆时针旋转 mxn矩阵 矩阵旋转 测试代码 测试结果 翻转和转置 2048 《2048》是一款比较流行​的数字游戏​,最早于2014年3月20日发行。原版2048由Gabriele Cirulli首先在GitHub上发布,后被移…

【Day59】代码随想录之动态规划_583两个字符串的删除操作_72编辑距离

文章目录 动态规划理论基础动规五部曲:出现结果不正确: 1. 583两个字符串的删除操作2. 72编辑距离 动态规划理论基础 动规五部曲: 确定dp数组 下标及dp[i] 的含义。递推公式:比如斐波那契数列 dp[i] dp[i-1] dp[i-2]。初始化d…

选择排序的简单介绍

选择排序是一种简单直观的排序算法,其原理如下: 1. 遍历数组,找到最小(或最大)的元素,并将其与数组的第一个元素交换位置。 2. 接着在剩下的元素中找到最小(或最大)的元素&#xff…

园区水费收费管理系统

园区水费收费管理系统是专为园区或小区的水费管理而设计的系统,旨在提高水费收费效率、精准监测水费使用情况,简化管理流程,为园区管理方和居民提供便捷、高效的水费管理解决方案。该系统结合了数字化技术和智能化管理手段,通过线…

动态规划-状态转移(O(n))

获取生成数组中的最大值 1.题目 2.思路 其实只要看透该题的本质 并不难,应用动态规划,题目就已经给出了状态方程的式子。 首先规定好maxn的大小,防止溢出。定义nums数组。定义一个函数,写入状态方程式子。最后定义一个变量与数…

【数据结构】数组

第一章、为什么数组的下标一般从0开始编号 提到数组,读者肯定不陌生,甚至还会很自信地说,数组很简单。编程语言中一般会有数组这种数据类型。不过,它不仅是编程语言中的一种数据类型,还是基础的数据结构。尽管数组看起…

Openstack云计算架构及前期服务搭建

openstack介绍 Openstack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作,支持几乎所有的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台 ----百度百科 Openstack是一个云操作系统&a…

css常用的选择器介绍

CSS(层叠样式表)选择器是CSS规则的一部分,它用于选择和定位网页上的元素,以便将样式应用到这些元素上。CSS选择器的种类繁多,每种选择器都有其特定的用途、特点和效率。在这篇文章中,我们将讨论一些常用的C…

环境分析检测小剂量移液用耐受硝酸盐酸PFA材质吸管特氟龙移液枪枪头

PFA枪头,为移液枪专业定制,广泛用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验室。地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等一些机构少量移液用。 规格参考:0.1-0.2ml、1ml、2ml、5ml、10ml等。 目前部分规格可适配普…

什么是智能运维产品线和服务线

智能运维产品线和服务线涵盖了一系列自动化和智能化的技术和服务,旨在提升IT运维的效率和有效性。智能运维(AIOps)利用大数据、分析技术和机器学习能力来自动执行和简化运营工作流程,包括收集和汇总多源IT基础架构组件的数据、应用…

el-checkbox实现全选,反选,单选

<template><div class"box"><el-checkbox v-model"checkAll" :indeterminate"isIndeterminate" change"onAllSelectChange"> 全选</el-checkbox><div class"item" v-for"(item,index) in l…

R语言——条形图数据可视化的多种方式

本文章将会介绍如何使用R语言中的ggplot2包使用条形图进行数据可视化。将会使用一个“生产企业原材料的订购与运输”的订单数据&#xff0c;该数据来自2021数学建模国赛C题。 某建筑和装饰板材的生产企业所用原材料主要是木质纤维和其他植物素纤维材料总体可分为 A B C 三种类…

【C++那些事儿】深入理解C++类与对象:从概念到实践(上)| 揭开this指针的神秘面纱

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C那些事儿 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 1. 面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符及封装4.1 访问限定符…

【蓝桥杯】快读|min和max值的设置|小明和完美序列|​顺子日期​|星期计算|山

目录 一、输入的三种方式 1.最常见的Scanner的输入方法 2.数据多的时候常用BufferedReader快读 3.较麻烦的StreamTokenizer快读&#xff08;用的不多&#xff09; StreamTokenizer常见错误&#xff1a; 二、min和max值的设置 三、妮妮的翻转游戏 四、小明和完美序列 五…

AI引擎助力,CamScanner智能高清滤镜开启扫描新纪元!

文章目录 ⭐ 写在前面⭐ 突破图像处理难点&#xff1a;扫描全能王的独特优势⭐ 耳听为虚&#xff0c;眼见为实⭐ 产品背后的主要核心&#xff1a;AI-Scan助力⭐ 深度学习助力智能文档处理的国际化进程⭐ 品味智能文档处理的轻松与精准 ⭐ 写在前面 在数字化快速发展的今天&…