数学建模理论学习:线性规划模型

2024-06-21 12:20

本文主要是介绍数学建模理论学习:线性规划模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

三要素:目标函数、约束条件(s.t.)、决策变量(x)

目标函数:z = ax1 + bx2 + cx3 + ...

其中c为一个序列,从左到右依次从x1到xn的系数

解决下面的线性规划问题:

% 目标函数系数:-x1 - 2x2
f = [-1; -2]; % 不等式约束 Ax <= b
% A向量表示决策变量的系数,B向量表示的是对应的条件,若不符合Ax <= b需进行初等变换
A = [1, 1; 2, 1; 1, 2];
b = [2; 3; 3];% 等式约束 Aeq x = beq(如果没有等式约束,则设置为空矩阵)
Aeq = [];
beq = [];% 变量下界和上界(如果没有界限约束,可以设置为空数组)
% lb表示决策变量的下界, ub表示决策变量的上界
lb = zeros(2, 1);
ub = [];% 调用 linprog 函数
[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, ub);% 显示结果
disp('最优解 x:')
disp(x)
disp('最优目标函数值 fval:')
disp(fval)
disp('退出标志 exitflag:')
disp(exitflag)
disp('输出信息 output:')
disp(output)

linprog函数:

[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, ub, options)

 

用linprog函数只能求解目标函数的最小值,如果我们需要求解最大值则需要加上符号变换一下即可:

% 建立目标函数
f = [-4, -3];% 建立约束条件
% Ax <= B
A = [2,1;1,1;0,1];
b = [40;8;7];
% A1x1 + A2x2 = B
Aeq = [];
Beq = [];
% x1, x2 的公共上界下界
lb = zeros(2,1);
ub = [];% 设置优化选项
options = optimoptions('linprog', 'Display', 'iter');% 求解线性规划结果
[x, fval, exitflag, output] = linprog(f, A, b, Aeq, Beq, lb, ub);
fval = -fval;% 输出结果
disp('最优解:')
disp(x)
disp('最优函数值:')
disp(fval)
disp(exitflag)
disp(output)

以下是对该目标函数的图像:

% 建立目标函数
f = [-4, -3];% 建立约束条件
A = [2, 1; 1, 1; 0, 1];
b = [40; 8; 7];% 变量下界
lb = zeros(2, 1);% 求解线性规划问题
[x, fval, exitflag, output] = linprog(f, A, b, [], [], lb, []);% 将最小化结果转换为最大化结果
fval = -fval;% 设置绘图范围
% 0 - 10 400个等间隔点的向量
x1 = linspace(0, 10, 400);
x2 = linspace(0, 10, 400);
% 0-10的正方形区间画等高线:
% 利用x1和x2两个向量声场两个400 * 400的矩阵X1, X2
[X1, X2] = meshgrid(x1, x2);% 计算目标函数值
Z = 4*X1 + 3*X2;% 绘制等高线
% 创建新的图形窗口
figure;
% 在指定范围内绘制20条等高线
contour(X1, X2, Z, 20); hold on;% 绘制约束条件
% 根据约束条件总结出约束范围:
fill([0, 0, 20, 20], [7, 0, 0, 7], 'b', 'FaceAlpha', 0.1); % x2 <= 7
fill([0, 8, 0], [8, 0, 0], 'g', 'FaceAlpha', 0.1); % x1 + x2 <= 8
fill([0, 20, 0], [0, 0, 40], 'r', 'FaceAlpha', 0.1); % 2x1 + x2 <= 40% 标记最优解
% MarkSize 标记点的大小 MarkFaceColor 标记点的颜色
plot(x(1), x(2), 'ro', 'MarkerSize', 10, 'MarkerFaceColor', 'r');% 标注和图例
xlabel('x1');
ylabel('x2');
title('线性规划问题的目标函数与约束条件');
legend('目标函数等高线', 'x2 <= 7', 'x1 + x2 <= 8', '2x1 + x2 <= 40', '最优解');
% 显示网格:
grid on;
% 取消绘图保持状态,使得下一次绘图会清除当前图形内容
hold off;

若目标函数不是线性函数:

例子:

 

这篇关于数学建模理论学习:线性规划模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx