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

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

相关文章

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如