MATLAB线形规划函数linprog、intlinprog与二次规划函数quadprog

2024-02-05 08:08

本文主要是介绍MATLAB线形规划函数linprog、intlinprog与二次规划函数quadprog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、目标函数简介

线形规划问题的数学模型:

min f(x)=Z*x , x\epsilon R^n  

s.t        A*x\leqslant b

            Aeq*x= beq  

线形规划,顾名思义就是目标函数与约束条件均为线形函数(一次函数)。

二、线形规划函数linprog

linprog函数的用法大致分为以下几种用法:

1、不等式约束

x = linprog(f,A,b)   ,f为目标函数,A为不等式约束的系数矩阵,b为不等式右侧的值,返回值x为最优解。

例1、目标函数       min f=3*x-y

                             s.t   -x+y\leqslant 1

                                       x+y\leqslant 3

                                    -x-3*y\leqslant -3

matlab代码

% x = linprog(f,A,b)  不等式约束
f=[3 -1]
A=[-1 1;1 1;-1 -3;]
b=[1;3;-3]
[x,fval]=linprog(f,A,b)%fval为目标点的函数值

2、等式+不等式约束

x = linprog(f,A,b,Aeq,beq),f为目标函数,A为不等式约束的系数矩阵,b为不等式右侧的值,Aeq为不等式约束的系数矩阵,beq为不等式右侧的值,返回值x为最优解。

例1、目标函数       min f=-x-y/3

                             s.t   x+y\leqslant 2

                                    x+y/4\leqslant 1

                                    x-y\leqslant 2

                             -x/4-y\leqslant 1

                                  -x-y\leqslant -1

                                  -x+y\leqslant 2

                                  x+y/4= 1/2

matlab代码

%% x = linprog(f,A,b,Aeq,beq) 包含等式、不等式
f=[-1 -1/3];
A=[1 1;1 1/4;1 -1;-1/4 -1;-1 -1;-1 1;];
b=[2; 1; 2; 1; -1; 2];
Aeq=[1 1/4];
beq=1/2;
[x,fval]=linprog(f,A,b,Aeq,beq)%fval为目标点的函数值

3、规定x的下限lb和上限ub

x = linprog(f,A,b,Aeq,beq,lb,ub),f为目标函数,A为不等式约束的系数矩阵,b为不等式右侧的值,Aeq为不等式约束的系数矩阵,beq为不等式右侧的值,lb、ub分别为x的下限和上限,返回值x为最优解。

例2、目标函数       min f=2*x1+3*x2+x3

                             s.t   -x1-4*x2-2*x3\leqslant -8

                                    -3*x1-2*x2*\leqslant -6

                                    x1,x2,x3\geqslant 0

matlab代码

%% x = linprog(f,A,b,Aeq,beq,lb,ub) 
f=[2 3 1]
A=[-1 -4 -2;-3 -2 0;];
b=[-8;-6];
lb=[0;0;0];
[x,fval]=linprog(f,A,b,[],[],lb); %fval为目标点的函数值

4、设置线性规划的算法

x = linprog(f,A,b,Aeq,beq,lb,ub,options) ,f为目标函数,A为不等式约束的系数矩阵,b为不等式右侧的值,Aeq为不等式约束的系数矩阵,beq为不等式右侧的值,lb、ub分别为x的下限和上限,options为算法设置句柄,返回值x为最优解。

matlab代码

%% x = linprog(f,A,b,Aeq,beq,lb,ub,options) 
% options = optimoptions('linprog','Algorithm','interior-point'); %内点法
options = optimoptions('linprog','Algorithm','interior-point-legacy');
% options = optimoptions('linprog','Algorithm','dual-simplex');%对偶单纯形法
f=[2 3 1];
A=[-1 -4 -2;-3 -2 0;];
b=[-8;-6];
lb=[0;0;0];
[x,fval]=linprog(f,A,b,[],[],lb,[],options)%fval为目标点的函数值

三、整数规划与0 1规划函数intlinprog

intlinprog函数与linprog函数用法相同,只是多出了一个整数项设置参数。

1、不等式约束

x = intlinprog(f,intcon,A,b),f为目标函数,intcon为整数设置项,A为不等式约束的系数矩阵,b为不等式右侧的值,返回值x为最优解。

例1、目标函数       min f=3*x-y

                             s.t   -x+y\leqslant 0.5

                                       x+y\leqslant 3

                                    -x-3*y\leqslant -3

matlab代码

%% x = intlinprog(f,intcon,A,b) 整数规划
f=[3 -1]
A=[-1 1;1 1;-1 -3]
b=[0.5;3;-3]
% intcon=[1]  %变量X1为整数项
% intcon=[2]  %变量x2为整数项
intcon=[1,2]  %x1、x2都为整数项 
% intcon=[]   %没有整数项
[x,fval]=intlinprog(f,intcon,A,b)

2、等式+不等式约束

x = linprog(f,intcon,A,b,Aeq,beq),f为目标函数,A为不等式约束的系数矩阵,intcon为整数设置项,b为不等式右侧的值,Aeq为不等式约束的系数矩阵,beq为不等式右侧的值,返回值x为最优解。

例2、目标函数       min f=-3*x1-2*x2-x1

                             s.t   x1+x2+x3\leqslant 7

                                    4x1+2x2+x3=12

                                    x1,x2,x3\geqslant 0

matlab代码

%% x = intlinprog(f,intcon,A,b,Aeq,beq) 
f=[-3 -2 -1]  %目标函数系数矩阵
A=[1 1 1] %不等式约束
b=7  
Aeq=[4 2 1] %等式约束
beq=12
intcon=[1 2 3] %x1 x2 x3都为整数项
lb=zeros(3,1) %下限为0
[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb)

3、0-1规划

例2、目标函数       min f=-3*x1-2*x2-x3

                             s.t   x1+x2+x3\leqslant 7

                                    4x1+2x2+x3=12

                                    x1,x2\geqslant 0 整数 且为整数

                                    x3= 0或1

matlab代码

%% 0-1 规划
f=[-3 -2 -1];
A=[1 1 1];
b=7;
Aeq=[4 2 1];
beq=12;
intcon=[1 2 3];
lb=zeros(3,1); 将x3下限和上线都设置为1即可
ub=[inf;inf;1];
[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

四、二次规划quadprog

定义:目标函数事自变量的二次函数,约束条件为线性函数。

二次规划问题的数学模型:

min (x^T*H*x)/2+f^T*x, x\epsilon R^n  

s.t        A*x\leqslant b

            Aeq*x= beq  

            lb\leqslant x\leqslant ub

例1、目标函数f(x)=x1^2+2*x2^2-2*x1*x2-2*x1-6*x2

                         s.t   x1+x2\leqslant 2

                               -x1+x2\leqslant 2

                                x1,x2\geqslant 0

1、首先对目标函数做处理,写成系数矩阵的形式

f(x)= (x^T*H*x)/2+f^T*x

=(a11*x1^2+a21*x1*x2+a12*x1*x2+a22*x2^2)+f1*x1+f2*x2

2、写出对应的系数矩阵

a11=2,a12=-2,a21=-2,a22=4,f1=-2,f2=-6

可得H与f

matlab代码

%% 二次规划
H=[2 -2;-2 4]
f=[-2;-6;]
A=[1 1;-1 2] %不等式约束
b=[2;2]
lb=zeros(2,1) %下限
[x,favl]=quadprog(H,f,A,b,[],[],lb)

 

这篇关于MATLAB线形规划函数linprog、intlinprog与二次规划函数quadprog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/680265

相关文章

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五