-
2021-11-29 16:06:35
第一个是线性规划问题与非线性规划问题,这里指的是目标函数以及约束条件都是线性函数,在可行解上(满足约束条件)是一个多边形,目标函数可以理解成一个斜面,好比是一个多边形的柱子,我用刀锋利的切了一刀。
另一种分类方式是凸规划与非凸规划问题,需要满足
如果每一条约束以及目标函数都满足上面的不等式,就把该优化问题称为凸规划问题,反之,则称为非凸规划问题。
现在人们慢慢发现用线性规划与非线性规划区分不是很合理,我们发现用凸规化和非凸规划问题区分问题的难易程度比较合理,所以将二三十年前的线性规划与非线性规划的优化问题的分类改为了凸规化和非凸规划的优化问题的分类。
更多相关内容 -
前端项目性能优化方案有哪些
2022-03-07 10:32:27前端项目性能优化方案汇总目录
一、 加载优化(减少http请求数)
常用的减少http请求数有以下几种:
1. 合并图片:当图片较多时,像精灵图,雪碧图可以合并为一张大图,从而减少http请求数。经常变化的图片可能不太合适,变化相对稳定的就可以考虑。合并大图除了能减少http 请求数外,还可以充分利用缓存来提升性能。
2. 合并压缩css样式表和js脚本,他们的共同目的都是为了减少http连接数。
3. 去掉不必要的请求,开发写代码或者系统升级之后残留的无效请求连接。4. 首屏加载:首屏快速显示可大大的提升用户对页面速度的感知,应尽量针对首屏的快速显示做出相应的优化。
5. 充分利用缓存:来减少向服务器发送的请求数,节省网络资源,所有静态资源都要放在服务器端并设置缓存,并且要尽量使用长缓存。6. 预加载:大型资源页面可使用Loading,资源加载完成后再显示页面,但是加载时间过长,会造成负体验。
7. 异步加载第三方资源:第三方资源不可控,会影响页面加载,所以要异步加载第三方资源。
二、图片优化
优化方法:
1. 尽可能的使用PNG格式的图片,它相对来说体积较小,可以使用工具压缩,在上线之前最好进行一定的优化。
2. 同时在代码中进行图片的延迟加载,也叫做赖加载。3. 避免img、iframe等标签的src属性为空:空src会重新加载当前页面,影响速度和效率。
4. 图像尽量避免使用DataURL:DataURL图像没有使用图像压缩算法,文件会变大,并且要解码后再渲染,加载慢耗时长。
三、使用CDN
CDN:实现把内容从中心媒体服务器分发到边缘服务器的网络体系即内容分发网络,CDN具有更低的网络延迟和丢包率,能够分配负载,节省带宽提高网站的性能,可以使用户就近取得所需内容,解决网络拥挤的状况,提高用户访问网站的响应速度。
如果安全性对你的网站很重要,就不要使用公共的CDN,因为当你远程从CDN请求文件时,你的访问来源信息也被发送过去,一些远程的js文件可能被修改用来搜集你的用户或者系统信息,而当你使用https协议时,能选择的CDN就更加有限。
四、开启Gzip(代码压缩)
Gzip即数据压缩,前端生产环境中将js、css、图片等文件进行压缩,通过减少数据传输量减小传输时间,节省服务器网络带宽,提高前端性能。
压缩时间、流程、说明
图片摘自网络,如有侵权,联系删!
五、样式表和JS文件的优化
1. 头部内联的样式和脚本会阻塞页面的渲染,一般我们会把css样式表文件放到文件的头部使用link引入,这样可以让CSS样式表尽早地完成下载。
2. 对应js脚本文件,一般我们把脚本放在尾部并使用异步方式加载,这样可以尽最大限度的减少样式和脚本对页面的阻塞。
六、减少不必要的Cookie
Cookie存储在客户端,伴随着HTTP请求在浏览器和服务器之间传递,由于cookie在访问对应域名下的资源时都会通过HTTP请求发送到服务器,从而会影响加载速度,所以尽量减少不必要的Cookie。
七、脚本优化
1. 复杂动画效果,使用绝对定位让其脱离文档流,避免循环DOM元素,用transform:translate 代替 position left、right...以此来尽量减少回流和重绘。
2.将脚本往后挪,减少对并发下载的影响。
3.缓存.length的值:每次.length计算使用一个变量保存值。
4.尽量使用事件委托:不给每个子节点单独设置事件监听器,而是设置在其父节点上,然后利用冒泡原理设置每个子节点,避免批量绑定事件以此来减少内存消耗和DOM操作。
5.尽量使用id选择器:id选择器选择元素是最快的,具有唯一性,灵活性和优先性的优点。
八、前端代码结构的优化
1.设置Viewport:HTML的viewport可加快页面的渲染。
2.减少DOM结点:DOM结点太多会影响页面的渲染。3.尽量使用css3动画:合理使用requestAnimationFrame动画代替setTimeout。
4.优化高频事件:scroll、touchmove等事件尽量使用函数防抖节流等进行限制。5. 不滥用WEB字体:WEB字体需要下载、解析、重绘当前页面,尽量减少使用。
6. 文件命名规则须统一且要有意义,同类型文件归类到相同的文件夹中。
九、SEO优化
1. 标题: 标题字数不要太长,一般写核心的关键词和网站主题相关的内容。
2. 描述:描述是整个页面的综合说明,作用和重要性仅次于标题,描述最好能得吸引人一点,带上自己公司的品牌词和电话,并包括目标关键词。
3. 关键词:对关键词进行优化,能够让用户在搜索关键词的时候,能够准确的定位到自己要搜索的内容和网站,能够让网站被更多有需要的人看到。
4.网站代码:网站代码尽量精简,节约百度蜘蛛的时候,这一点针对大型网站特别重要。
以上内容整理于网络,仅供学习使用,侵权联系删!
-
数学建模之优化模型详解
2022-03-09 21:51:29全文共8090个字,码字总结不易,老铁们来个三连:点赞、关注、评论作者:[左手の明天] 原创不易,转载请联系作者并... 这些问题都是“最优化问题”,也是数学建模中的典型问题,解决最优化问题的数学方法就是“最优化..全文共8090个字,码字总结不易,老铁们来个三连:点赞、关注、评论
作者:[左手の明天]
原创不易,转载请联系作者并注明出处
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。“优化”是生活中经常使用的词:坐出租车时希望司机不绕弯路、走优化路线;逛超市时考虑各种优惠活动,希望获得最大优惠;企业推出新产品要综合考虑成本与市场吸引力,对资金进行优化配置,等等。 这些问题都是“最优化问题”,也是数学建模中的典型问题,解决最优化问题的数学方法就是“最优化方法”。
最优化方法的出发点是系统思维,最优化方法的基本思路是在一定的约束条件下,保证各方面资源的合理分配, 最大限度地提升系统某一性能或系统整体性能,最终实现最理想结果。运用最优化方法建立并求解数学模型,主要包括以下步骤:
(1)明确目标,分析问题背景,确定约束条件,搜集全面的客观数据和信息;
(2)建立数学模型,构建变量之间的数学关系,设立目标函数;
(3)分析数学模型,综合选择最适合该模型的优化方法;
(4)求解模型,通常借助计算机和数学分析软件完成;
(5)对最优解进行检验和实施。目录
求解算法3:最速下降法(steepest descent method)
数学规划的一般模型
其中,x~决策变量;f(x)~目标函数;gi(x)≤0~约束条件
MATLAB 求解优化问题的主要函数
模型及基本函数
优化函数的输入变量
优化函数的输出变量
无约束最优化问题
数学描述
解析解法和图解法
举例:用解析和图解法求解下列方程
<<syms t; y=exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5; ezplot(y,[0 4]) y1=diff(y); ezplot(y1,[0 4]) t0=solve(y1) y2=diff(y1); b=subs(y2,t,t0)
数值解法
命令形式1:
x=fminsearch(fun,x0) %简单形式 [x,f,flag,out]=fminsearch(fun,x0,opt,p1,p2,…) %一般形式
功能:与fsolve()中的参数控制形式类似。
注:若函数时多元的,要表达成向量的形式。
命令形式2:
x=fminunc(fun,x0) %简单形式 [x,f,flag,out]=fminunc(fun,x0,opt,p1,p2,…) %一般形式
功能:与fsolve()中的参数控制形式类似。
举例:
>>f=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))','x'); x0=[0,0]; ff=optimset;ff.Display='iter'; x=fminsearch(f,x0,ff) >>x=fminunc(f,x0,ff)
全局最优解和局部最优解
一元函数极小
X=fminbnd(fun,x1,x2)
多元无约束极小
X=fminunc(fun,x0) (牛顿法) X=fminsearch(fun,x0)
举例1:(初值的影响力)设目标函数为
试观察不同的初值得出的最小值。
>> f=inline('exp(-2*t)*cos(10*t)+exp(-3*(t+2))*sin(2*t)','t'); t0=1;[t1,f1]=fminsearch(f,t0) t1=0.92275390625000,f1=-0.15473299821860 >> t0=0.1;[t2,f2]=fminsearch(f,t0) t2=0.29445312500000,f2=-0.54362463738706 >> syms t; y=exp(-2*t)*cos(10*t)+exp(-3*(t+2))*sin(2*t); ezplot(y,[0,2.5]); axis([0 2.5 -0.6 1])
举例2:对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?
建立模型:
设剪去的正方形的边长为x,,则水槽的容积为:
建立无约束优化模型为:
模型求解:
先编写M文件如下:
function f=myfun(x) f=-(3-2*x).^2*x;
调用fminbnd:
[x,fval]=fminbnd(@myfun,0,1.5)
运算结果为:
x = 0.5000,fyal =2.0000.
即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米。
带约束最优化问题
线性规划问题
目标函数:
约束条件:
情况一
目标函数:
其中,C为价值向量
约束条件:
其中,b为资源向量;X为决策变量向量
其中:
命令形式1:
[X,lag,how]=lp(C,A,b,v1,v2,x0)
功能:
- C,A,b的意义如矩阵表示里参数;
- v1,v2表示决策变量的上界和下界(其维数可以小于X,但表示前几个分量的上下界);
- x0表示初始值;X时输出最优解;
- lag是lagrange乘子,维数等于约束条件的个数,非零的向量是起作用的约束条件;
- how给出错误信息:infeasible(无可行解),unbounded(无界解),ok(求解成功).
举例:
>> c=[13,-1,5]; A=[-1,-1,0;0,1,1]; b=[-7,10]; v0=[2,0,0]; [X,lag,how]=lp(c,A,b,v0)
情况二
目标函数:
约束条件:
命令形式2:
[X,f,flag,c]=linprog(C,A,b,Aeq,Beq,xm,xM,x0,opt)
功能:各个参数的解释如前,若各个约束条件不存在,则用空矩阵来代替。
- x: 解
- f: 最优值
- flag:大于零表示求解成功,否则求解出问题
- c:求解信息
- x0:搜索点的初值
- opt:最优化控制项
举例1:
>> c=[-2,-1,-4,-3,-1]; A=[0 2 1 4 2;3 4 5 -1 -1]; b=[54,62]; Ae=[];Be=[]; xm=[0,0,3.32,0.678,2.57]; ff=optimset; ff.LargeScale='off'; ff.TolX=1e-15; ff.Display='iter'; [X,f,flag,c]=linprog(c,A,b,Ae,Be,xm,[],[],ff)
举例2:某车间生产A和B两种产品,为了生产A和B,所需的原料分别为2个和3个单位,所需的工时分别为4个和2个单位。现在可以应用的原料为100个单位,工时为120个单位。每生产一台A和B分别可获得利润6元和4元。应当生产A和B各多少台能获得最大利润?
分析:
模型建立:
设生产A产品x1 台,生产B产品 x2台
模型求解:
f=[-6,-4]'; A=[2 3;4 2]; B=[100;120]; Ae=[]; Be=[]; xm=[0,0]; ff=optimset; ff.LargeScale='off'; % 不用大规模问题求解 ff.TolX=1e-15; ff.TolFun=1e-20; ff.TolCon=1e-20; ff.Display='iter'; [x,f_opt,key,c]=linprog(f,A,B,Ae,Be,xm,[],[],ff)
举例3:(任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为 800 和 900,三种工件的数量分别为 400、600 和 500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?
模型建立:
设在甲车床上加工工件 1、2、3 的数量分别为 x1、x2、x3,在乙车床上加工工件 1、2、3 的数量分别为 x4、x5、x6。可建立以下线性规划模型:
模型求解:
f = [13 9 10 11 12 8]; A = [0.4 1.1 1 0 0 0 0 0 0 0.5 1.2 1.3];b = [800; 900]; Aeq=[1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1]; beq=[400 600 500]; vlb = zeros(6,1); vub=[]; [x,fval] = linprog(f,A,b,Aeq,beq,vlb,vub)
举例4:某厂每日 8 小时的产量不低于 1800 件。为了进行质量控制,计划聘请两种不同水平的检验员。一级检验员的标准为:速度 25 件/小时,正确率 98%,计时工资 4 元/小时;二级检验员的标准为:速度 15 小时/件,正确率 95%,计时工资 3 元/小时。检验员每错检一次,工厂要损失 2 元。为使总检验费用最省,该工厂应聘一级、二级检验员各几名?
模型建立:
设需要一级和二级检验员的人数分别为 x1、x2 人,则应付检验员的工资为:
因检验员错检而造成的损失为:
故目标函数为:
约束条件为:
线性规划模型:
模型求解:
c = [40;36]; A=[-5 -3]; b=[-45]; Aeq=[]; beq=[]; vlb = zeros(2,1); vub=[9;15]; %调用 linprog 函数: [x,fval] = linprog(c,A,b,Aeq,beq,vlb,vub)
结果:
x = 9.0000 0.0000 fval =360
即只需聘用 9 个一级检验员。
二次规划问题
目标函数:
约束条件:
命令形式:
[X,f,flag,c]=quadprog(H,C,A,b,Aeq,Beq,xm,xM,x0,opt)
功能:
各个参数的解释如前,若各个约束条件不存在,则用空矩阵来代替。
举例:
>> c=[-2,-1,-4,-3,-1]; A=[0 2 1 4 2;3 4 5 -1 -1]; b=[54,62]; Ae=[];Be=[]; xm=[0,0,3.32,0.678,2.57]; ff=optimset; ff.LargeScale='off'; ff.TolX=1e-15; ff.Display='iter'; [X,f,flag,c]=linprog(c,A,b,Ae,Be,xm,[],[],ff)
非线性规划问题
定义
如果目标函数或约束条件中至少有一个是非线性函数时的最优化问题就叫做非线性规划问题.
一般形式:
其中
是定义在 En 上的实值函数,简记:
其它情况:
求目标函数的最大值或约束条件为小于等于零的情况,都可通过取其相反数化为上述一般形式.
其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.
求解算法1:间接法
在非线性最优化问题当中,如果目标函数能以解析函数表示,可行域由不等式约束确定,则可以利用目标函数和可行域的已知性质,在理论上推导出目标函数为最优值的必要条件,这种方法就称为间接法(也称为解析法) 。 一般要用到目标函数的导数。
求解算法2:直接法
直接法是一种数值方法。这种方法的基本思想是迭代,通过迭代产生一个点序列{ X(k) },使之逐步接近最优点。 只用到目标函数。 如黄金分割法、Fibonacci、随机搜索法。
迭代法一般步骤
注意:数值求解最优化问题的计算效率取决于确定搜索方向P (k)和步长
的效率。
求解算法3:最速下降法(steepest descent method)
由法国数学家Cauchy于1847年首先提出。在每次迭代中,沿最速下降方向(负梯度方向)进行搜索,每步沿负梯度方向取最优步长,因此这种方法称为最优梯度法。
特点:
方法简单,只以一阶梯度的信息确定下一步的搜索方向,收敛速度慢; 越是接近极值点,收敛越慢; 它是其它许多无约束、有约束最优化方法的基础。 该法一般用于最优化开始的几步搜索。
最速下降法算法:
Matlab求解步骤
用Matlab求解上述问题,基本步骤分三步:
1. 首先建立M文件fun.m,定义目标函数F(X):
function f=fun(X); f=F(X);
3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:
(1) x=fmincon(‘fun’,X0,A,b) (2) x=fmincon(‘fun’,X0,A,b,Aeq,beq) (3) x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB) (4) x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’) (5) x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options) (6) [x,fval]= fmincon(...) (7) [x,fval,exitflag]= fmincon(...) (8) [x,fval,exitflag,output]= fmincon(...)
输入参数的几点说明:
模型中如果没有A,b,Aeq,beq,VLB,VUB的限制,则以空矩阵[ ]作为参数传入;
nonlcon:如果包含非线性等式或不等式约束,则将这些函数编写一个Matlab函数
nonlcon就是定义这些函数的程序文件名;
不等式约束 G(x)<=0
等式约束 Ceq(x)=0.
如果nonlcon=‘mycon’ ; 则myfun.m定义如下
function [G,Ceq] = mycon(x) G= ... % 计算非线性不等式约束在点x处的函数值 Ceq= ... %计算机非线性等式约束在点x处的函数值
示例
例子1:
2个不等式约束, 2个等式约束 3个决策变量x1,x2,x3 如果nonlcon以‘test’作为参数值,则程序test.m如下
function [G,Ceq]=test(x) G(1)=x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-100 G(2)=60-x(1)*x(1)+10*x(3)*x(3) Ceq(1)=x(1)+x(2)*x(2)+x(3)- 80 Ceq(2)=x(1)^3+x(2)*x(2)+x(3)- 80
注意:
[1] fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。
[2] fmincon函数可能会给出局部最优解,这与初值X0的选取有关。
例子2:
1.先建立M文件 fun.m,定义目标函数:
function f=fun(x); f=exp(x(1)) *(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
2.再建立M文件mycon.m定义非线性约束:
function [g,ceq]=mycon(x) g=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10]; ceq=[];
3.主程序为:
x0=[-1;1]; A=[];b=[]; Aeq=[1 1]; beq=0; vlb=[]; vub=[]; [x,fval]=fmincon('fun4',x0,A,b,Aeq,beq,vlb,vub,'mycon')
4.运算结果为:
x = -1.2250 1.2250 fval = 1.8951
0-1规划问题
数学描述:自变量的取值只能为0或1
matlab解:
X=bintprog(f,A,B,Aeq,Beq)
小规模问题可以穷举
举例:求解下面的0-1线性规划问题
f=[-3,2,-5]; A=[1 2 -1; 1 4 1; 1 1 0; 0 4 1]; B=[2;4;5;6]; x=bintprog(f,A,B,[],[])'
钢管的订购与运输问题
要铺设一条A1→A2 →……→ A15的输送天然气的主管道,如图一所示(见下页)。经筛选后可以生产这种主管道钢管的钢厂有 。图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位km)。
为方便计,1km主管道钢管称为1单位钢管。一个钢厂如果承担制造这种钢管,至少需要生产
500个单位。钢厂Si在指定期限内能生产该钢管的最大数量为Si个单位,钢管出厂销价1单位钢管为pi万元,如下表:1单位钢管的铁路运价如下表:
1000km以上每增加1至100km运价增加5万元。公路运输费用为1单位钢管每公里0.1万元(不足
整公里部分按整公里计算)。钢管可由铁路、公路运往铺设地点(不只是运到点A1,A2,……,A15 ,而是管道全线)。问题
(1)制定钢管的订购和运输计划,使总费用最小.
(2)分析对购运计划和总费用影响:哪个钢厂钢管销价的变化影响最大;哪个钢厂钢管产量上限的变化影响最大?
(3)讨论管道为树形图的情形问题1的基本模型和解法
总费用最小的优化问题
基本模型:二次规划
Floyd算法求解步骤
Floyd算法过程描述如下:
- 1、 首先S以边集M初始化,得到所有的直接连通代价;
- 2、 依次考虑第k个结点,对于S中的每一个S[i][j],判断是否满足:S[i][j]>S[i][k]+S[k][j],如果满足则用S[i][k]+S[k][j]代替S[i][j],此为第k步;
- 3、 k循环取遍所有结点,算法结束时,S为最终解。
最优化方法在数学建模中的应用
梯度下降法
梯度下降法是经典的最优化方法之一[4],其核心思想是高等数学中的导数理论。 梯度下降法实现最优化的原理是,每次迭代更新目标函数时,都以该变量导数(即梯度)的反方向作为更新参数的方向,最终解一定会收敛于最优解。 这个原理类似于走下坡路时,总是沿着最陡峭的方向向下走,最后就一定会走到坡底。梯度下降法的实现简单, 但是求解计算时间长,因此基于梯度下降法发展了很多改进算法,包括随机梯度下降法、小批量梯度下降法等,能够有效改善计算成本高的问题。
惩罚函数法
惩罚函数法,指的是引入惩罚因子和惩罚函数的最优化方法[5]。 具体来说,惩罚函数的思想是:将最优化问题中的约束条件视为围墙,而迭代更新的解视为在围墙内运动的粒子,一旦粒子靠近围墙,对应的惩罚因子数值就会增大,导致惩罚函数值增大,反之,粒子远离围墙时,惩罚函数值就减小。 建立了这种惩罚机制后,在每次迭代过程中,模型为了“避免被惩罚”,逐渐趋近于约束边界,从而找到了最优解。惩罚函数法对模型的训练虽然“简单粗暴”,但是原理直观、实现门槛低,是实际工程中备受青睐的最
优化方法。遗传算法
不同于梯度下降法和惩罚函数法,遗传算法并非依据导数理论提出的算法[6],而是一种模拟生物在自然届中进化规律的一种智能算法。 自然界的生物进化遵循适者生存和优胜劣汰,即能够适应环境变化或基因变异的个体才能够参与到进化。 遗传算法的优化原理与之类似:每一次迭代时,通过计算各个个体的适应度,从中随机地选择两个个体作为父母,繁殖后代,同时诱发子代的染色体变异,重复迭代,当出现最大适应度的子代时,即认为获得了最优解,循环结束。与梯度下降法、惩罚函数法相比,遗传算法以生物进化为原型,收敛性较好,在计算精度要求时,具有计算时间少、鲁棒性高的优势。
蚁群算法
与遗传算法类似,蚁群算法也是受启发于生物的一种最优化方法[7]。 生物科学家发现蚂蚁经过的路上都会有一种特殊物质,并且蚁群中的蚂蚁对该物质高度敏感,由于该物质浓度越高,代表着路途长度越短,想要走“捷径”的蚁群们都会选择浓度较高的道路行走,“捷径”经过的蚂蚁越多,特殊物质的浓度就越高,物质浓度积累到一定程度,所有蚂蚁都会被吸引到最佳捷径上来,都能以最快速度找到食物了。 蚁群算法解决最优化问题,就是利用了其分布计算和信息正反馈的特点。
-
谈一谈凸优化问题
2021-07-14 15:05:44看到好多人都在学习凸优化,但是有感觉有多少问题多符合凸优化条件的呢?为什么非得是凸优化这么重要?现有的优化方法不是都能解决吗?那凸优化又有什么用呢? 优化问题的具体应用场景 投资组合优化 优化变量:投资...谈一谈凸优化问题
看到好多人都在学习凸优化,但是有感觉有多少问题多符合凸优化条件的呢?为什么非得是凸优化这么重要?现有的优化方法不是都能解决吗?那凸优化又有什么用呢?
优化问题的具体应用场景
投资组合优化
优化变量:投资于不同投资方案的金额
约束:预算/每个投资方案的最大或最小投资额/最小回报率
目标函数:整个投资组合的风险回报率
电子电路中的设备大小
优化变量:设备的长和宽
约束:制造工艺的限制/时间要求/最大面积
目标函数:功耗
数据拟合(机器学习中的一些算法,譬如svm等应用)
优化变量:模型的参数
约束:参数的限制/优先的条件
目标函数:预测的误差函数(loss function等)
除了这些之外优化问题在其他各个领域还有很多的应用,总之优化问题在实际应用场景中是非常常见的。如何解决优化问题
一般的优化问题:都比较难解决,解决方法一般都是一种折中方案(逼近),由于非常长的计算时间,或者一直没有找到问题的解。
一些特例(能够高效和可靠的被解决的一类问题):最小二乘法问题 线性规划问题 凸优化问题
不过在看我的回答之前,可以先了解下凸函数、凸集、凸锥(简称“三凸”)的定义。
首先,我们还是要看下,什么是凸优化?抛开凸优化中的种种理论和算法不谈,纯粹的看优化模型,**凸优化就是:1、在最小化(最大化)的要求下,2、目标函数是一个凸函数(凹函数),3、同时约束条件所形成的可行域集合是一个凸集。**以上三个条件都必须满足。而世间万物千变万化,随便抽一个函数或集合它都可能不是凸的。
所以,先回答题主的第一个问题,这个世上的绝大部分优化问题当然不是凸优化问题。既然如此,为什么凸优化这么重要呢,以及凸优化有什么用呢?(另外,凸优化并不能看成是某一种优化方法)无非三点:
**1、还是有相当一部分问题是或等价于凸优化问题。**有许多问题都可以直接建立成凸优化模型(比如:线性规划LP(Linear Programming)、某些特殊的二次规划QP(Quadratic Programming)、锥规划CP(Conic Programming)其中包括:要求约束中变量落在一个二阶锥里的二阶锥规划SOCP(Second Order Cone Programming)、要求约束中变量是半正定矩阵的半定规划SDP(Semi-Definite Programming)等)。以上这些类型,总之就是要符合凸优化上述的要求。需要说明的就是,许多可行域都可以看作是凸锥(Convex Cone)的交集,所以将以上一些类型的约束混合起来,依然是凸优化问题。
另外还有一些问题,可以等价的转化为凸优化问题。例如 Linear-Fractional Programming (LFP),目标函数是两个仿射函数(Affine Function)的比,约束是一个多面体。这种目标函数具有既是拟凸又是拟凹的性质,通过一个叫做 Charnes-Cooper transformation 的转化,可以变成一个线性规划。同时,如果我们要最大化 LFP 的目标函数,且其约束仅是一个0-1整数约束(这显然不是一个凸集),我们可以将其直接松弛(Relax)成0到1的约束,并且和原问题等价。因为最大化拟凸函数,最优值一定可以落在可行域的极点上。这个结论可以用来帮助解决 Multi Nomial Logit(MNL)选择模型下的商品搭配问题( Assortment Optimization)。
**2、大部分凸优化问题解起来比较快,也即多项式时间可解问题(P)。如果你的问题能直接或间接(但必须是等价的)**转化成上面我提到的那些类型,那恭喜你,后面的事儿基本就可以交给solver啦,当然大规模问题还需要考虑诸如列生成(Column Generation)之类的方法,提高运算效率。
那为什么大部分凸优化解起来比较快呢?这涉及到凸函数的局部最优即全局最优的性质以及凸集分离定理(Seperation Theorem)。我们形象一点来思考这个问题,而不拘泥于理论。如果了解凸函数(或凹函数)的定义,我们可以想象成站在函数的曲线上去搜索最优解,所要做的无非就是向下到底(或向上到顶),需要考虑的是用什么样的角度迈出第一步以及每的步子要迈多大才更快的到达最优值。同时,作为凸集的可行域,让我们更容易在有限范围内迅速锁定最优解,而不用四处打探。(以下为简单说明这个道理,脑补了一段情节,对理论熟悉的可以略过)
以线性规划为例(目标函数既凸且凹,所以最大化最小化皆可),想象你在目标函数那个超平面上一路狂奔,因为是最小化(或最大化),你得往觉得最轻松(或费劲)的下坡(上坡)方向跑,跑着跑着,你就碰到可行域这个多面体的墙壁了。没关系,你感觉贴着壁的某个方向还是可以轻松(或费劲)地继续跑,跑着跑着到了一个拐角,即所谓的极点。你觉得再走下去就费劲(或省力)了,这样就找到了一个最优的极小值(极大值),否则,你可以沿着墙壁继续走下去。如果,这个时候的可行域不是凸集,而是被人胡乱咬了一口,形成了凹凸不平的缺口。如上方法搜索,你可能已经到达这个缺口的某一个角落,前方已经没有任何能改善你可行解的道路了,你可以就此停止吗?不能!因为想象有另一个你,也如上所述,跑到了这个缺口的另一个无处可走的角落,他也认为自己可以停止了,那你们就还需要比较两个各自所在的位置的解,哪一个会更优。当然,可能还有第三个你,第四个你。。。但不要忘了,每一个你的搜索都需要时间,最终的比较也需要时间(除非你们之间没有缺口,可能都会继续跑下去,到达了一个共同的最优值)。所以非凸的可行域要比一个凸集的可行域麻烦的多。(注:以上形象化的描述的未必就是多项式时间的算法。现实中如单纯形法就不是多项式时间的算法,但实际运用中仍然很高效。)
当然,也有例外,即虽然是凸优化但不是多项式时间可解的。比如在约束中,要求变量是一个Copositive 矩阵或者 Completely Positive 矩阵,这两种矩阵所在的锥恰为对偶锥。此类问题很难解的原因在于,你要去检查一个矩阵是不是落在这样的锥里,就已经不是多项式时间可以解决的了,更不用说整个优化问题。
**3、很多非凸优化或NP-Hard的问题可以转化(并非是等价的)为P的凸优化问题。并给出问题的界或近似。这对如何设计合理的算法,或衡量算法结果的优劣起到很大的帮助。**非凸优化的问题基本上都是NP-Hard的,所以要找到其最优解,理论上是不确定有一个多项式时间的算法的,所以这时候会考虑设计一些近似算法,或者启发式算法,就要依靠凸优化。要把一个优化问题转化为凸优化的方法和例子有很多,以下试举几例说明。
**对偶(Duality)**是每个学习运筹学或者凸优化的人都必须熟练掌握的方法,对偶有很多种,本科运筹就教会大家写一个线性规划的对偶形式,高等数学里面也会提到用到拉格朗日乘子之类的约束优化问题,也即解拉格朗日对偶或者KKT条件。一般的,对于许多非凸优化的问题,我们仍然可以写出它的拉格朗日对偶,拉格朗日对偶永远都是一个关于对偶变量的凸优化问题,并且根据弱对偶定理,可以给出原问题的下界。
**松弛(Relaxation)**也是常用的方法之一,在第一点里,我们举了一些例子可以通过松弛,去掉整数约束,使其等价为凸优化。通常情况下,我们松弛原问题,只能得到一个可行域更大的问题,如果原问题是求最小,则松弛后的问题的最优值一定小于等于原问题的最优值,这也是一种给出下界的方法。松弛不仅仅用于整数约束,只要利于将可行域非凸变为凸集皆可。
当然,相应的处理方法还有很多,面临一些随机优化(Stochastic Optimization)、机会约束规划(Chance Constrained Programming)、鲁棒优化(Robust Optimization)、离散凸优化(Discrete Convex Optimization)问题,还有更多其他的处理方法,就不在此一一道来。更多内容,可以看各位答案里推荐的书籍,都是经典教材
1. 为什么凸优化重要?
各位答主们已经洋洋洒洒写了很多了。我这边简单来说就是两点,凸优化性质好,并且即使是日常生活中的许多非凸优化问题,目前最有效的办法也只能是利用凸优化的思路去近似求解。一些例子有:带整数变量的优化问题,松弛之后变成凸优化问题(所以原问题其实是凸优化问题+整数变量);任意带约束的非凸连续优化问题,其对偶问题作为原问题解的一个lower bound,一定是凸的!一个更具体的例子,大家都知道针对带有hidden variable的近似求解maximum likelihood estimate的EM算法,或者贝叶斯版本里头所谓的variational Bayes(VB) inference。而原本的MLE其实是非凸优化问题,所以EM和VB算法都是找到了一个比较好优化的concave lower bound对这个lower bound进行优化。
这是什么意思呢?也就是说到今天2019年为止,我们还是只对凸优化问题比较有把握。当然有人可能要说了,现在各种深度学习中的优化问题都是极其复杂的非凸优化问题,不是大家也能解的挺好?这个问题的回答就更难一些,我个人观点,简单来说是这样,目前对于这些非凸优化问题取得的算法理论方面的突破大体其实归结于找到这些非凸优化问题中“凸”的结构。这也是为什么我们看到一阶算法(SGD, ADAM等)仍然大行其道,而分析这些非凸优化算法的时候其实很多的lemma(引理)仍然是凸优化(凸分析)里的引理或者引申。举个例子,我们大家都知道凸函数的各种等价定义。而在Zeyuan Allen-Zhu的一系列非凸优化算法的文章中所谓的非凸性的刻画仍然是基于此衍生出来的:
来源:Allen-Zhu, Zeyuan. Natasha: Faster Non-Convex Stochastic Optimization via Strongly Non-Convex Parameter. International Conference on Machine Learning. 2017.
我们知道它里面这个刻画非凸性的参数 如果取成0,那就等价于凸函数的定义,如果取成负的,那么实际上就是所谓strongly convex,而如果是正的,就变成它这里的non-convexity了。实际上,现在非凸优化里面很多的非凸性刻画都是脱胎于凸优化,比如prox regularity之类的,或者一些更弱的convexity定义(这在经典凸分析里就已经有不少研究了,quasi-convex,psuedo-convex等等),这里不再赘述。
个人认为,我们能真正一般化地解决非凸优化问题,那肯定是要对一般的混合整数(线性)规划(MILP, mixed integer linear programming)要有好的办法求解才算。因为任意一个非凸优化问题,都可以用很多的分段线性函数逼近,最后变成一个MILP。当然,因为P!=NP这个猜想的存在,这件事情在理论上肯定是hopeless,但是在实际当中,基于硬件能力的提升,还有比如量子计算机一类的新技术,我个人对人类未来能够在实际中求解MILP还是持一个比较乐观的态度。到那个时候,我觉得我们才能说传统的凸优化理论才是真正过时了。
2. 现有的优化方法不是都能解决(凸优化)吗?那凸优化又有什么用呢?
首先先明确一点,凸优化难吗?嗯相比非凸优化,各种NP-complete问题,凸优化里各种P问题,那肯定是简单的。然而,在实际当中,我们完全不可能满足于有一个“多项式时间算法”就好了。
我们知道,运筹学,优化问题,反映到现实世界里面就是各种数学建模问题。这些问题,普遍地出现在航空业、金融业、广告业、电商零售业、能源业、医疗业、交通业等各个领域。我们必须要明确一点,计算复杂性理论(P,NP这套东西)在实际当中其实是没什么用处的。嗯,NP hard, NP complete问题很难,没有多项式时间算法,但如果你实际的问题规模不太大,比如几十个城市的旅行商问题(TSP, travelling salesman problem),几十x几十的图上的NP-complete问题,是不是很难?然而现在2019年,你在iphone上下个app,一部小小的手机不要几秒钟就能给你算出最优解。(实际上,他们这个app,1000个左右城市的TSP iphone也顶多要算个几小时就能找到全局最优解,无近似)求解app,当然,这得益于他们家目前行业领先的解大规模TSP底层算法…
与此相对应的,即使是一个P问题,但是如果实际当中你的问题规模超级大呢?实际上反而这个问题会让你更头疼的。举个例子,比如现在优酷、天猫、京东、亚马逊这些个平台,每天你登陆网站,它在推荐栏都需要根据你的历史活动记录决定推荐哪些产品给你。这个在线推荐算法,本质上只是需要求解一个线性规划问题(LP, linear programming, 比一般的凸优化还简单),甚至还不是一个一般的线性规划,有个专门的名字叫做packing LP,这类packing LP理论上可以有跟问题规模呈线性的复杂度的算法(忽略log项,跟排个序差不多…)。听起来是不是很简单?然而,实际这些问题的规模无比巨大,每天这些平台上线人次可以以亿记,这些平台可以推荐的商品也是至少百万千万规模的。。而且实际问题还有各种各样的现实约束,比如我们希望我们的算法可以完全在线更新(online,甚至是streaming algorithm),我们的算法需要灵活运用存储数据的数据结构,需要利用计算集群的并行能力,分布式能力,这也是需要非常非常专门的(一阶)优化算法设计的。。这边就不再多说了,因为我个人确实在之前公司实习的时候,发现中国最好的IT公司面对这类海量规模的“简单”LP,实际上远没有能力去完美地求解。。
因此说现有的方法能解决所有的凸优化问题,但从实际的角度其实还差的远。事实上,目前的大公司面对如此规模的优化问题,也就LP还可以勉强接受,像是什么second-order cone prorgamming (SOCP), semidefinite programming (SDP)根本目前实际中都不可能大规模求解。而这两类问题在理论上还仍然都是**“线性”**的,因为可以写成linear conic programming,所以就更不要说一般的带约束的凸优化问题了。实际上,在这个方面,无论是求解器(solver)还是更好的理论算法的开发都还有大量的研究空间。比如,SDP实际当中的大规模算法设计目前来看还基本一片空白,有很多很基本的问题都还没有在理论上得到满意的解答(像SDP其实和另一类凸优化问题只有一丝之隔,copositive programming,**而这类凸优化问题的计算复杂度却是NP complete的,所以即使是凸优化也未必复杂度就容易!实际上,所有mixed 0/1 nonconvex quadratic program都可以写成copositive program这个凸优化的形式。**两者的算法设计也因此都很蛋疼)。。还有这么多没有解决的问题,又如何能说凸优化的问题都已经被“解决”了呢?
5月29号召开的非凸优化与分布式优化的理论,算法及应用国际研讨会对该问题做了合理深入的讨论
有喜欢研究这方面的大佬可以深入了解一下参考:https://blog.csdn.net/chan_cyx/article/details/80274747
https://www.zhihu.com/question/24641575 -
常见的运筹优化类问题及常用的优化算法
2021-10-19 16:48:57之前的研究的是有关多目标优化的方向,期间涉及到二次规划问题最优求解,以及kkt条件相关的知识。在研究启发式方法的同时也涉及到与传统优化方法的比较。因此在这里总结一些运筹向常见的问题, TSP、VRP、设施选址... -
数学建模之优化问题
2019-01-22 23:37:13下面进行阐述3种类型的优化处理以及matlab代码。 线性规划问题 用matlab处理一般的线性规划问题的标准型为: min z=∑j=1ncjxi\sum_{j=1}^nc_jx_i∑j=1ncjxi s.t.∑j=1naijxi≤bj\sum_{j=1}^na_{ij}x_i\... -
Lingo解决优化问题
2018-08-30 17:15:02前面,我们已经对Lingo有了一定的了解,但是要想真正的熟悉Lingo在解决优化问题中的强大之处,还需要不断加强相关训练,本文主要是使用Lingo来解决优化问题,该文的主要目的有以下三点: 希望能够提升自己对Lingo... -
【数学】凸优化问题、带约束凸优化问题
2020-04-17 20:45:41常见的凸集有: n维实数空间;一些范数约束形式的集合;仿射子空间;凸集的交集;n维半正定矩阵集;这些都可以通过凸集的定义去证明。 凸函数的定义为: 其几何意义表示为函数任意两点连线上的值... -
最优化问题的求解分类
2019-02-09 10:10:19通常需要求解的最优化问题有如下几类: 无约束优化问题,可以写为: 有等式约束的优化问题,可以写为: 有不等式约束的优化问题,可以写为:额 对于第1类的优化问题,使用的方法为费马大定理(Fermat) ... -
最优化学习 常见凸优化问题的类型
2021-05-29 00:54:06常见凸优化问题的类型线性规划分式线性规划转为线性规划最小化多面体函数带二次约束的二次规划二阶锥规划 线性规划 分式线性规划转为线性规划 最小化多面体函数 带二次约束的二次规划 min12x⊤Q0x+c0⊤x\min \... -
最优化问题(一)
2020-10-03 17:47:05优化问题共有3个层次。最简单的是无约束优化,中间的是带等式约束的优化,最难的是带不等式约束和等式约束的优化。 -
数据库性能优化有哪些方式?
2019-07-04 22:00:51尽量使用数字类型字段,提高比对效率; 长度不变且对查询速度要求高的数据可以考虑使用 char,否则使用 varchar; 表中字段过多时可以适当的进行垂直分割,将部分字段移动到另外一张表; 表中数据量过大可以适当的... -
LTE弱覆盖问题分析与优化
2021-01-27 06:53:01《LTE弱覆盖问题分析与优化》由会员分享,可在线阅读,更多相关《LTE弱覆盖问题分析与优化(5页珍藏版)》请在装配图网上搜索。1、LTE弱覆盖问题分析与优化摘要本文结合现网实际工作情况介绍了LTE弱覆盖的发现手段,... -
多目标优化问题概述
2017-08-29 20:34:16关键词:条件约束,折中最优解(解并非唯一是与单目标优化问题的本质区别) 文字描述: D个决策变量参数; N个目标函数; m+n个约束条件。 数学描述:X(小写)为D维决策向量;y为目标向量;N为优化目标总数;... -
常用的SQL优化办法有哪些
2019-08-15 20:54:05可以通过打开Mysql中的慢查询日志来定位有问题的sql语句 慢查询日志相关内容:https://www.cnblogs.com/kerrycode/p/5593204.html 慢查询日志主要分为5部分,第一部分是慢查询时间,第二部分是慢查询的来源主机和... -
Lingo编程解决优化问题
2020-08-06 13:35:19Lingo编程解决优化问题 优化问题在中学我们已经接触,如利用线性规划解决问题就是优化问题。用Lingo解决优化问题简单来说就是把约束条件的数学表达式用Lingo程序编写出来,然后利用约束条件求得目标问题的最优解。... -
最优化问题——无约束优化方法(一)
2020-06-02 16:01:37实际的优化问题一般都有很多的约束,那么为什么还需要研究无约束的最优化方法呢?首先,我们从一个例子开始,相信大家在看到我的这篇文章之前,对于机器学习中的SVM算法已经有了一定的了解,对于SVM的求解,同样也是... -
Python求解凸优化问题之CVXPY
2021-11-12 08:08:01CVXPY CVX是由Michael Grant和Stephen ...CVX支持的问题类型 Linear programs (LPs) Quadratic programs (QPs) Second-order cone programs (SOCPs) Semidefinite programs (SDPs) 还可以解决更复杂的凸优化问题, -
最优化问题的求解
2019-12-24 13:58:221、方法很多,但是还是有类别的,可以根据问题 推荐用什么方法求解。 2、要么有无约束,要么是否整数。 3、先看无约束的优化。可以用fermat(费马)定理搞定,意思是如果想要求解一个问题的最优解,根据导数==0的... -
遗传算法求解多约束、多类型车辆、多目标优化的车辆路径问题
2017-03-21 13:54:45目前关于车辆路径问题的模型种类很多,因此在建立综合优化模型时可选择的也很多,考虑到在实际情况中,配送中心大都是少批次、多品种的配送,需要将多个客户的货物集中到一起后再进行配送,而车辆装载货物的量有限,... -
最优化问题及其分类——决策变量、目标函数、约束条件
2022-03-28 16:00:42最优化问题:在一定的约束条件下,求解最优的输入,以使得目标函数取得期望极值的问题。 最优化问题的三个要素:决策变量decision variables、目标函数objective function、约束条件constraints。 最优化问题可... -
优化问题中的对偶性理论
2017-06-09 20:43:37优化问题中的对偶性理论 Standard 本文讲的是优化问题中与对偶问题、对偶性理论相关的内容,包括对偶问题的最优解、弱对偶性、强对偶性、共轭函数、以及KKT条件等。 点此展开本文目录 ... -
LET学习之路1-覆盖问题优化措施
2018-07-24 15:25:00道路覆盖优化原则: 1.先优化覆盖后优化干扰,先进行单站优化后进行全网优化; 2.消除弱覆盖,净化切换带,消除交叉覆盖; 3.优先优化弱覆盖,越区覆盖,再优化导频污染; 4.优先调整天线的下倾角,方位角,其次... -
MySQL的索引原理,索引的类型有哪些,如何创建合理的索引,索引如何优化。
2019-06-09 23:15:03实现范围查询) 五、Mysql 创建索引类型有哪些? 普通类型(CREATE INDEX) 唯一索引,索引列的值必须唯一(CREATE UNIQUE INDEX) 多列索引 主键索引(PRIMARY KEY),一个表只能有一个 全文索引(FULLTEXT INDEX),... -
解析Oracle数据扫描Oracle SQL查询优化
2020-12-15 00:50:34之前我们讨论了在数据库中数据读取操作的类型,重点讨论了对数据读取操作大为有益的局部范围扫描的数据读取方式,同时还探讨了数据库优化器模式对于启用局部范围扫描的影响,以及启用局部范围扫描的前提下优化器设置... -
OptiStruct高级优化培训1.pdf
2020-03-28 18:28:24优化问题能否做到多工况、多类型变量组合优化? 5.复杂类型优化问题如何做工程简化? 6.如何评价所需要研究的问题可以采用优化技术得到可靠的结果? 7.优化参数调整了很多次依然得不到好的优化结果怎么办? 8.对自己... -
(顶刊)同时带有决策和目标约束的多目标优化问题
2020-11-06 15:39:00在真实世界中,带有决策和目标约束的多目标优化问题常常都同时出现。但以前的人工CMOPS从来没有同时考虑过决策和目标约束。因此,本文设计了一个同时带有决策和目标约束的人造的多目标优化问题集,取名为DOC。 另外... -
MATLAB 求解最优化问题
2017-08-17 20:49:03MATLAB 求解最优化问题 MATLAB 优化工具箱解线性规划 模型1 minz=cXs.t.AX≤b \text{min} \quad z=cX \\ s.t.\quad AX\leq b 命令:x=linprog(c,A,b)x=\text{linprog}(c,A,b) 模型2 minz=cXs.t.AX≤... -
前端的性能优化都有哪些东西?
2016-04-21 13:40:19所以我们就从实际的工程应用角度出发,聊我们最常遇见的前端优化问题。 Yslow是雅虎开发的基于网页性能分析浏览器插件,可以检测出网页的具体性能值,并且有著名的Yslow 23条优化规则,这23条,就够我们玩的了。 ... -
粒子群算法(PSO)解决函数优化问题
2019-03-22 22:27:00粒子群算法(PSO)解决函数优化问题 本文转载自:http://wenku.baidu.com/link?url=E6F5Nv6kW5nOQ2BD3mm4q5ld22o_pLQ48jPD-9N4q_1Sh-lJOrWVCo1Bc9SYB514goOOpXQJrk5sqTyzvrVthvnhXWqBnwzAMl4S8Miveka### 目录 ...