🤡关于美赛个人定位与团队分工:
1、建模:三人一起讨论模型思路,确保每人都能明白模型架构与原理;参数处理、模型改进与优化等细节交给建模者处理。
2、编程:模型确立好后,编程者写程序求解问题,如果用到某些算法,需要与另外两人讨论清楚,确保三人思路在一条线,尤其确保写论文的人能理解算法原理。
3、写论文:涉及模型和算法方面的,要由最能理解模型或算法的人写出梗概交给写作者,由写作者扩充出正文,确保全文语句和排版的风格一致。
而且比赛过程中,三人的任务不是固定的,例如A擅长第一问的模型和第二问的编程,那么就要随时调整每个人侧重的任务。
还需注意,一切工作以论文为中心。因为最终评委看到的就是论文。
数学建模国赛,组队 & 历年赛题知识点
🤠学MATLAB还是Python?
直接给结论:都学!先学MATLAB.
但是一个团队有人精通MATLAB,有人精通Python就牛犇啦!
具体理由看这个:https://www.jianshu.com/p/94d27362ebac
🍍美赛规则
本周计划入门MATLAB
在掌握MATLAB基本代码编写规则后开始学习MATLAB中的数模知识。
每个模型简单了解适用赛题和原理,以及代码求解。
一. 线性规划模型
三要素:决策变量,目标函数,约束条件。
☆ 要解决的是优化类问题(在一组线性
约束条件下,求线性目标函数的max)
适用赛题:“怎样分配”、“利润最大”、“运输、车次、生产安排”等等。
总收益最大
一般为线性规划;总收益率最大
一般为非线性规划
收益率=收益/成本如果成本为变量,是-1次幂,为非线性——判断标准还是
看约束条件和目标函数的变量是否完全是一次方。
❓给该公司设计一种投资组合方案,用给定的资金M,有选择地购买若干种资产或存银行生息,使净收益尽可能大,总体风险尽可能小。
1. 问题分析
- 目标函数:净收益尽可能大,总体风险尽可能小
- 约束条件:总资金有限、隐含条件(每笔投资都是非负数)
2. 基本假设
由于投资数额M相当大,题目给定的定额μi相对较小,piui更小,可假设每一笔交易额xi都大于对应μi
(即不考虑xi<μi的情况,简化模型)
3. 模型建立
决策变量:投资项目si的资金为xi(i=0,1,2,3,4),总收益Q
目标函数:
多目标线性规划模型
4. 模型简化
现实中,不同人风险承受能力不同。
设某类投资者,能接受的最大投资风险率为定值a
∴只要风险率<=a, 可视为对该投资者满足"总风险尽可能小"✨
qixi/M ≤ a
风险率=投资额*损失率/总资产
分情况讨论——将两个目标转化为一个目标(总风险小于定值):
设低风险投资者能接受a=5%,中风险投资者能接受a=15%等等
5. 完成模型
6. 模型改进
现实中的a是一个变量
在求解过程中,对不同a取值分别进行求解(该操作是将a作为变量)
7. 代码求解
调用MATLAB自带的Linprog函数
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)
% x为变量取值,fval返回最优解
% f为系数向量,最小值形式下
% A,b为不等式约束的变量系数矩阵和常数项矩阵,<形式下
% Aeq,beq为等式约束的系数矩阵和常数项矩阵
% lb,ub为决策变量的最小&最大取值
% 求最大值等价于求-y的最小值
f = [-0.05,-0.27,-0.19,-0.185,-0.185]; %目标函数的系数向量
A = [zeros(4,1),diag([0.025,0.015,0.055,0.026])]; %A是不等书约束条件的变量系数矩阵
%zeros(4,1)生成4行一列全0矩阵
%diag()为对角矩阵
Aeq = [1,1.01,1.02,1.045,1.065];
beq = 1;
lb = zeros(5,1);
Q = zeros(1,length(a)); %初始化保存最优解的矩阵Q
xx = []; %定义空矩阵用来存不用风险率下的最优解
for i = 1:length(a)
b = a(i)*ones(4,1);
[x,y] = linprog(f,A,b,Aeq,beq,lb);
Q(i) = -y;
xx = [xx;x'];
end
数模论文中这些操作和标准化的形式不必写出来, 知道用linprog函数会用到该形式就行
plot(a,Q,'*r');
xlabel("风险率");
ylabel("最大收益");