0057____火电厂aP^2+bP+c (平方或折线分段函数) 的线性化
一、参考链接
https://blog.csdn.net/zhangxd212489/article/details/122263798?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165452789216781483756181%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=165452789216781483756181&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-122263798-null-null.142v11pc_search_result_control_group,157v13new_style&utm_term=%E5%B9%B3%E6%96%B9%E7%BA%BF%E6%80%A7%E5%8C%96&spm=1018.2226.3001.4187
已查阅的资料,并不完全适合我,我也没看到合适的代码,所以自己写了个。。。。
二、实际论文的平方线性化过程
三、应用场景
①平方项的约束(若只有目标函数里有平方,那么大概率可以不用线性化)
例:热电联产的碳排放、成本等
②折线分段函数
例:阶梯碳交易等
四、本人的实现流程
首先,可以发现P2是平方项,与P阶数不同,因此需要线性化。
线性化过程如下:
其他地方约束照旧,用P方便的就直接用P
当已知0<=P<=500时,我们可以将其分为数段,我50一段,
因此,断点的x分别为[0, 50 ,100 ,150 ,200 …… 450 500 ]
对应y值是:[ 0 2500 …… 250000 ];
区段只有10个,落点位置标识10个,因此呢,需要将断点11个分成【下限10,上限10】
下限:down =[0, 50 ,100 , 150 ,200 …… 450 ];
上限:up =[50 ,100 ,150 ,200 …… 500 ];
将下限与上限拼成一个210的矩阵down_up。
(4)引入落点位置标识的辅助变量B = binvar(10,1 )
易知:只有一个落点在某个区段,因此:约束1:sum(B)==1;
判断P落在哪一个区段:约束2:downB <= P <=upB
利用错位相减法,把各个区段的k = [k1 k2 …… k10 ],至于 b = [b1 b2 …… b10 ]不用求,可以用down0^2B + dita_PkB去替代P^2
dita_P = P - down0B; %%第一个难点,BKB式子,如果B相同,仅有一个1,那么大概率可以去掉一个B
(6)其中再次出现变量相乘:sdpvarbinvar,因此需要进一步线性化:
类比可知,B相当于X1 ,P相当于 X2 ,PB相当于 y ,火电机组出力范围也刚好是[0, u=500 ]
因此可以直接套用为以下约束:
y = sdpvar(10,1)
y<=uB
y<=P
y>=P-u(1-B)
0<=y<=P
%%第二个难点,dita_PkB式子,k间隔是不行的,需要替换位置成,kB dita_P,但是这样就出现了sdpvarbinvar不再是[1×1] [1×1],而是[10×1]* [1×1],因此需要注意思考其可行
%%第三个难点,X1与Y都必须推广到[N×1]个变量,那么此时的P2可替代为down02B + kY =[1×N]* [N×1] 去替代
(7)综上:a1+b1P +c1P^2 = a1+b1P+c1( down0^2B + ky )
至此,仅仅实现了1个火电机组1个时刻出力的P^2的线性化
五、推广到N台机组T个时刻
见视频配套程序包,我做了两个推广
(1)1台机组T个时刻的出力
(2)M台机组T个时刻的出力:这个推广的较为冗杂,相当于每台机组,需要一段代码,但是我没法继续推广,将N台机组公用一个矩阵,因为,仅仅1台机组T个时刻的出力,就已经出现了构造m*n的矩阵,若是N台机组T个时刻的出力就需要构造三维矩阵,那个我不熟悉,有大神会的,可以给我私发,有偿
六、快速查找替换方法的演示,见视频最后
(1)全m文件替换
(2)选中某区域内进行替换(无法实现,有大神会的,可以给我私发,有偿)
(3)从某行开始逐一替换
七、注意点
(1)只是目标函数里有变量平方大概率可以不用线性化,
(2)约束条件里有变量平方,且所在等式里同时含有1阶和2阶的,必须要线性化
P^2线性化到底有没有用。
文中程序,线性化正确性的验证。线性化后的9.1076与9.099相近且略大,验证正确与。
Y>=0必须要写。
八、程序在我个人B站里进行了详细的解释
https://space.bilibili.com/211568434?spm_id_from=333.1007.0.0
感谢阅读!!!
0057____火电厂aP^2+bP+c (平方或折线分段函数) 的线性化相关推荐
- 手机芯片的AP、BP和CP
AP(application process):手机中的应用处理器CPU.操作系统.用户界面和应用程序都在AP上执行. BP(baseband):基带处理器.即手机中的modem,运行手机射频通讯控制 ...
- android系统开发 AP 和 BP 简要说明
手机的AP和BP根据上下文可以指代硬件和软件两种意思. 1) 大多数的手机都含有两个处理器.操作系统.用户界面和应用程序都在Application Processor(AP)上执行,AP一般采用 ...
- Android AP 和 BP的概念
Android AP 和 BP的概念 AP:Application Processor,即应用芯片: BP:Baseband Processor,即基带芯片: FCC(美国联邦通信委员会)认证要求将A ...
- 安卓中的AP、BP、NV是什么意思?
安卓中的AP.BP.NV是什么意思? 参考链接:https://blog.csdn.net/baidu_27196493/article/details/78217927 1.大多数的手机都含有两个处 ...
- 手机里面的AP与BP
高通的芯片里面又分AP.BP, AP与BP分别表示什么? AP:Application Processor,即应用芯片 BP:Baseband Processor,即基带芯片 双核,四核,八核主要指的 ...
- Android中AP和BP概念
AP和BP 大多数的手机都含有两个处理器.操作系统.用户界面和应用程序都在Application Processor(AP)上执行,AP一般采用ARM芯片的CPU.而手机射频通讯控制软件,则运行在另一 ...
- [转载] android系统开发 AP 和 BP 简要说明
转自 https://blog.csdn.net/zhanghao_hulk/article/details/8468621 手机的AP和BP根据上下文可以指代硬件和软件两种意思. 1) 大多数 ...
- Android手机系统开发中的AP和BP是什么
现在大部分的手机都含有两个处理器. 操作系统,应用程序都会在Application Processor上运行,即AP上运行,AP一般残影ARM芯片cpu,也是我们平常认为的cpu. 手机射频通讯控制软 ...
- 手机端AP和BP的含义
词语解释: Applicationprocessor (AP) = CPU + GPU Cellularprocessor (CP) = Cellular modem Graphical Proces ...
最新文章
- 线性求[1,P-1]的逆元
- 离散傅里叶变换(DFT)(为了使用而学习的DFT)
- Design Pattern - Bridge(C#)
- java8 LocalDate 日期比较大小
- 0100-Same Tree(相同的树)
- php语言难点,PHP知识难点TOP3,挑战一下你
- oracle in 索引_Oracle 性能优化总结
- Java ——异常处理
- C# 指针操作图像 细化处理
- string类有可以调换方向的函数吗_关于String类的split()方法
- Web App开发入门
- android模拟器命令行,夜神安卓模拟器命令行整理贴
- 计算机书籍每周销量排行榜
- iOS Segue使用
- Go避免使用大堆造成的高GC开销
- 深信服SSL远程接入与深信服行为审计同步登陆用户信息
- Jenkins编辑或替换All view
- Jfinal-Controller层注入Service空指针异常
- Python matplotlib 批量绘图内存不够问题(Out of memory)
- QQ邮箱 接受 天气查询 阿里云自动运行学习记录