主要内容

解决问题,没有直系的约束,巴萨多的问题

问题optimización típico

Este ejemplo muestra cómo resolver un problem de optimización没有线性的resingido utilizdo el enfoque basado en problem。Este ejemplo demuestra el flujo de trabajo típico: crear una función目标,crear限制,解决问题和检查结果。

注:

Si la función物象限制没有线性están计算元素,deberá转换las funciones没有线性表达式optimización实用fcn2optimexpr.领事última与你在一起,Formulación alternativa con fcn2optimexpr阿,将非线性函数转化为优化表达式

我是一个解决问题的顾问Resolver unproblem没有线性的resingido basado en solvers

Formulación del problem: función de Rosenbrock

考虑最小问题función德罗森布罗克

f x ) 1 0 0 x 2 - x 1 2 ) 2 + 1 - x 1 ) 2

尤其对埃尔迪斯科失去,法国中央第一电台的迪斯科舞厅。手到擒来 x Que minimiza la función f x ) 尤其对埃尔 x 1 2 + x 2 2 1 establecido。Este problem es una minimización de una función没有直系sujeta a una restricción没有直系。

La función de Rosenbrock es una función de prueba estándar de optimización。英勇的人mínimo único在光明的路上,0阿尔canzado[1].Encontrar el mínimo es un reto para algunos algoritmos, ya que la función tiene un mínimo表面的dentro de un valle con muchas弯曲。La solución没有什么问题可以解决[1],雅que ese punto no satisface la restricción。

这是一段美好的回忆función罗森布罗克在迪斯科世界。El eje vertical está en escala logarítmica, es decir, que la gráfica muestra 日志 1 + f x ) ) .Las líneas de conorno quedan debajo de la gráfica de肤浅。

Rosenbrock = @(x)100*(x(:,2) - x(:,1).^2)。^2 + (1 - x(:,1)).^2;向量化函数图1 =图(“位置”,[1 200 600 300]);colormap (“灰色”);轴广场;R = 0:.002:1;TH = 2*pi*(0:.002:1);X = R'*cos(TH);Y = R'*sin(TH);Z = log(1 + rosenbrock([X(:)),Y(:)]));Z =重塑(Z,大小(X));创建子图Subplot1 = subplot(1,2,1,“父”,图1);视图([124 34]);网格(“上”);持有%创建曲面冲浪(X, Y, Z,“父”subplot1,“线型”“没有”);%创建轮廓轮廓(X, Y, Z,“父”, subplot1);创建子图Subplot2 = subplot(1,2,2,“父”,图1);视图([234 34]);网格(“上”);持有%创建曲面冲浪(X, Y, Z,“父”subplot2,“线型”“没有”);%创建轮廓轮廓(X, Y, Z,“父”, subplot2);%创建文本箭头注释(图1,“textarrow”(0.4 - 0.31),...(0.055 - 0.16),...“字符串”,{'最小值为(0.7864,0.6177)'});%创建箭头注释(图1,“箭头”(0.59 - 0.62),...[0.065 - 0.34]);标题(《Rosenbrock的函数:两种观点》)举行

图中包含2个轴对象。坐标轴对象1包含曲面、轮廓等类型的2个对象。轴对象2标题Rosenbrock的功能:两个视图包含2个对象类型的表面,轮廓。

El identificador de funcióncalcula la función de Rosenbrock en un número cualquiera de puntos 2D al mismo timempo。问好Vectorizacion加速拉representación德拉función y puede resultar útil en otros conttos para加速拉evaluación de una función en varios puntos。

脂肪酸的 f x ) se骆驼脂肪酸objetivo.La función objectivo es La función que desea minimizar。La desigualdad x 1 2 + x 2 2 1 se骆驼restriccion.Las restricciones limitan el conjunto de x 清醒的联合国求解者布斯卡联合国mínimo。Puede tener cualquier número限制,que son desigualdades o ecuaciones。

定义un问题利用变量optimización

El enfoque basado en problem清醒la optimización利用变量optimización para definir El客观限制。Existen dos enfoques para crear表达式utilzando estas变量:

  • Para funciones polinómicas o racionales, escriba表达式直接与变量。

  • Para otros tipos de funciones, convierta funciones a表达式de optimización confcn2optimexpr.ConsulteFormulación alternativa confcn2optimexpr最后的死亡。

Para este problem, tanto la función objectivo como la restricción没有直系儿子polinomios, de modo que puede描述las表达式直接en términos de变量de optimización。Cree una变量de optimización en 2D美洲驼“x”

X = optimvar(“x”、1、2);

Cree la función goal como un polinomio en la variable de optimización。

Obj = 100*(x(2) - x(1)²)²+ (1 - x(1))²;

Cree un problem de optimización llamado概率反对objComo la función客观性。

问题=优化问题(“目标”、obj);

Cree la restricción没有线性como un polinomio en la variable de optimización。

Nlcons = x(1)²+ x(2)²<= 1;

Incluya la restricción没有直系en el问题。

probo . constraints .circlecons = nlcons;

修改问题。

显示(概率)
优化问题:求解:x最小化:((100 .* (x(2) - x(1).^2).^2) + (1 - x(1).^2)受制于圆:(x(1). ^2)。^2 + x(2) ^2 <= 1

解决问题

Para resolver el problem de optimización, lame a解决.这个问题是一个偶然的问题,它是一个结构和比例的问题,它是一个偶然的变量optimización。Cree la estructura de punto inicialx0联合国的英勇 x [0 0]

x0。x=[0 0];[sol,fval,exitflag,output] = solve(prob,x0)
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
索尔=带字段的结构:X: [0.7864 0.6177]
Fval = 0.0457
exitflag = OptimalSolution
输出=带字段的结构:迭代:24 funcCount: 34 constrviolation: 0步长:6.9161e-06算法:'内部点' firstorderopt: 2.1625e-08 cgiterations: 4消息:'局部最小值发现满足约束....bestviable: [1x1 struct] objectivederivative: "reverse-AD" constraintderivative: "closed-form" solver: 'fmincon'

Examinar la solución

La solución muestraexitflag = OptimalSolution.Este indicador de salida indica que la solución es un óptimo当地。Para obtener información清醒cómo encontrar una solución mejor, consulteCuando el solver tiene éxito

这是我们的秘密solución我们的限制。Puede comprobar que la solución realmente sea facfactible de formas。

  • 在坎普里有个不方便的指示constrviolation结构损伤输出

Infeas = output. contration
Infeas = 0

这是不可能的,这是不可能的。

  • 计算器la infactibilidad en la solución。

Infeas =不可行(nlcons,sol)
Infeas = 0

一个新的,一个不可能的,一个solución不可能的。

  • Calcule la norma dex海洋之门1。

Nx = norm(sol.x)
Nx = 1.0000

La estructura输出Proporciona más información sobre el proceso de resolución, como el número de iteraciones (24), el solver (fmincon) y el número de evaluaciones de función(84)。Para obtener más información sobre estas estadísticas, consulte公差标准detención

Formulación alternativa confcn2optimexpr

Para obtener expresiones más complejas, escriba archivos de función Para la función objetivo o la función de restricción y conviértalas a una expresión de optimización mediantefcn2optimexpr.Por ejemplo, la base de la función de restricción no lineal está en el archiivodisk.m

类型磁盘
函数radsqr = disk(x) radsqr = x(1)²+ x(2)²;

Convierta este archiivo de función a una expresión de optimización。

Radsqexpr = fcn2optimexpr(@disk,x);

Además, también puede convertir el identificador de función, que se definió al comenzar la rutina de representación, a una expresión de optimización。

Rosenexpr = fcn2optimexpr(rosenbrock,x);

Cree un problem de optimización con estas expression de optimización convertidas。

Convprob =优化问题(“目标”rosenexpr,“约束”,radsqexpr <= 1);

视觉新问题。

显示(convprob)
优化问题:求解:x最小化:((100 .* (x(2) - x(1).^2).^2) + (1 - x(1).^2)服从:(x(1).^2)。^2 + x(2) ^2 <= 1

新问题的解决。La solución es básicamente La misma que antes。

[sol,fval,exitflag,output] = solve(convprob,x0)
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
索尔=带字段的结构:X: [0.7864 0.6177]
Fval = 0.0457
exitflag = OptimalSolution
输出=带字段的结构:迭代:24 funcCount: 34 constrviolation: 0步长:6.9161e-06算法:'内部点' firstorderopt: 2.1625e-08 cgiterations: 4消息:'局部最小值发现满足约束....bestviable: [1x1 struct] objectivederivative: "reverse-AD" constraintderivative: "closed-form" solver: 'fmincon'

Para ver la lista de funciones compatibles, consulte金宝app优化变量和表达式的支持操作

特马relacionados