【day5】从零开始学数学建模-国赛2020C题305-问题一-贷款策略-多目标规划模型
前言
前面对数据进行预处理,求得123家企业的守约率,现在需要根据已有数据建立有信贷记录的银行多目标规划模型。
模型的具体建立过程请看参考论文2020全国大学生数学建模竞赛论文展示(C305) - 2020全国大学生数学建模竞赛论文展示 - 中国大学生在线此处摘录模型的公式:

多目标规划模型
论文用的是Lingo求解,但我没有安装这个软件(其实是不想下载),所以继续用Matlab。
Lingo的使用方法贴在这里,有需要自取。
最优化方法(基于lingo)之 目标规划问题求解(6/6)_lingo求解多目标线性规划-CSDN博客
下面是论文最后面找到的Lingo多目标规划模型的求解方法:

代码实现
Matlab求解多目标规划模型的教程有很多,这里我贴出一些我认为较好的帖子,有兴趣可以自行练习。
数模3—Matlab线性规划、非线性规划、多目标规划(超全解法合集)-CSDN博客
【MATLAB】求解约束条件下的目标函数最值(fmincon用法解析)_fmincon函数用法-CSDN博客
先前没有接触过多目标规划模型,学习了一通,我还是不会用Matlab求解(主要是这个对于初学者的我而言过于复杂了)。
在比赛的时候不建议再继续学了,要么自觉下载Lingo,要么就要请出 世纪最强后援、代码小帮手——AI,辅助我们解决问题。
再次重申,在比赛的时候不要随便用AI,不要随便用AI,不要随便用AI,(重要的话说三遍)。
具体要求请看“全国大学生数学建模竞赛人工智能工具使用规定 (2025 年试行)”
clear;clc;
%% 步骤1: 准备数据
load p_1.mat
%% 步骤2: 定义模型参数
n = 123; % 企业数量
x_min = 10; % 最小贷款额(万元)
x_max = 100; % 最大贷款额(万元)
total_min = 1230; % 总贷款下限(万元)
total_max = 12300; % 总贷款上限(万元)
r_min = 0.04; % 最低年利率
r_max = 0.15; % 最高年利率
%% 步骤3: 建立优化模型
model = optimproblem('ObjectiveSense','maximize');
% 定义决策变量
x = optimvar('x', n, 'LowerBound', x_min, 'UpperBound', x_max); % 贷款额度
r = optimvar('r', n, 'LowerBound', r_min, 'UpperBound', r_max); % 贷款利率
% 目标函数
model.Objective = sum((r - (1-p)) .* x);
% 添加约束条件
% 1. 总贷款额度约束
model.Constraints.totalLoan = total_min <= sum(x);
model.Constraints.totalLoan = sum(x) <= total_max;
% 2. 最大风险约束
max_acceptable_risk = 50; % 可接受的最大风险值
model.Constraints.riskLimit = (1-p).*x <= max_acceptable_risk;
%% 步骤4: 求解优化问题
options = optimoptions('fmincon', 'Algorithm', 'sqp', ...
'Display', 'iter', 'MaxIterations', 1000, ...
'MaxFunctionEvaluations', 10000);
% 初始解 (等额贷款, 中等利率)
x0.x = ones(n,1) * total_min/n;
x0.r = ones(n,1) * (r_min + r_max)/2;
x0.u = max((1-p).* x0.x);
% 求解
[sol, fval, exitflag] = solve(model, x0, 'Options', options);
loan_amounts = sol.x; % 各企业贷款额度(万元)
interest_rates = sol.r; % 各企业贷款利率
total_profit_value = sum((sol.r-(1-p)).*sol.x); % 总收益
%% 步骤5: 分析结果
% 按贷款额度排序
[sorted_loans, idx] = sort(loan_amounts, 'descend');
% 风险-收益分布图
figure;
scatter((1-p).*loan_amounts, (interest_rates - (1-p)).*loan_amounts, 50, p, 'filled');
colorbar;
title('企业风险-收益分布');
xlabel('风险值: (1-p_i)x_i');
ylabel('收益值: [r_i - (1-p_i)]x_i');
grid on;
结果
| 企业 | 守约率(%) | 贷款金额 | 贷款金额利率 | 企业 | 守约率(%) | 贷款金额 | 贷款金额利率 |
| E1 | 3.33E-05 | 16.3786 | 0.110772 | E63 | 69.60307019 | 17.83611 | 0.112716 |
| E2 | 99.02826326 | 22.4253 | 0.114753 | E64 | 75.44781181 | 18.59975 | 0.113222 |
| E3 | 97.50578972 | 22.14892 | 0.114735 | E65 | 62.18219664 | 16.95937 | 0.112103 |
| E4 | 99.99992373 | 10.07691 | 0.09661 | E66 | 61.0041032 | 16.82916 | 0.112009 |
| E5 | 66.16127536 | 17.41707 | 0.112428 | E67 | 65.80943793 | 17.37546 | 0.112399 |
| E6 | 90.37870949 | 20.87787 | 0.114482 | E68 | 60.11685607 | 16.73265 | 0.111938 |
| E7 | 99.25237909 | 22.43994 | 0.114706 | E69 | 60.0687226 | 16.72745 | 0.111934 |
| E8 | 93.41855523 | 21.40299 | 0.114586 | E70 | 63.05235783 | 17.05708 | 0.112173 |
| E9 | 97.09653377 | 22.07178 | 0.114719 | E71 | 64.29563546 | 17.19898 | 0.112274 |
| E10 | 95.00929566 | 21.68733 | 0.114642 | E72 | 46.88529562 | 15.74455 | 0.111065 |
| E11 | 55.89232841 | 16.29101 | 0.111608 | E73 | 57.96227812 | 16.50377 | 0.111768 |
| E12 | 88.04337317 | 20.48956 | 0.114388 | E74 | 68.25171444 | 17.66895 | 0.112602 |
| E13 | 76.92845048 | 18.80408 | 0.113354 | E75 | 55.03239081 | 16.20464 | 0.111542 |
| E14 | 65.06730844 | 17.28843 | 0.112338 | E76 | 64.79729632 | 17.25701 | 0.112315 |
| E15 | 92.86398617 | 21.30544 | 0.114566 | E77 | 56.04257012 | 16.30622 | 0.111619 |
| E16 | 92.27297841 | 21.20236 | 0.114546 | E78 | 59.88700771 | 16.70787 | 0.11192 |
| E17 | 76.7469861 | 18.7788 | 0.113338 | E79 | 65.71505134 | 17.36434 | 0.112391 |
| E18 | 83.91276385 | 19.83085 | 0.113994 | E80 | 47.10333478 | 15.73931 | 0.111069 |
| E19 | 83.07652561 | 19.70227 | 0.113916 | E81 | 75.31281995 | 18.58135 | 0.113211 |
| E20 | 72.03120806 | 18.14521 | 0.112924 | E82 | 49.84137014 | 15.72201 | 0.111157 |
| E21 | 73.57901871 | 18.34824 | 0.113058 | E83 | 63.12972707 | 17.06583 | 0.11218 |
| E22 | 82.50076906 | 19.61465 | 0.113862 | E84 | 74.923698 | 18.5285 | 0.113176 |
| E23 | 83.48959734 | 19.76559 | 0.113955 | E85 | 63.01049473 | 17.05234 | 0.11217 |
| E24 | 84.17526127 | 19.87154 | 0.114019 | E86 | 49.42928913 | 15.72205 | 0.111142 |
| E25 | 53.19192183 | 16.02365 | 0.111402 | E87 | 59.11389277 | 16.62515 | 0.111859 |
| E26 | 76.10345934 | 18.68968 | 0.113281 | E88 | 75.41365616 | 18.59509 | 0.113219 |
| E27 | 74.44586178 | 18.46403 | 0.113134 | E89 | 75.45667311 | 18.60096 | 0.113223 |
| E28 | 74.08037355 | 18.41502 | 0.113102 | E90 | 53.16658509 | 16.02119 | 0.1114 |
| E29 | 67.49924991 | 17.57736 | 0.112539 | E91 | 75.55390302 | 18.61424 | 0.113232 |
| E30 | 75.13321505 | 18.55692 | 0.113195 | E92 | 58.46620983 | 16.55662 | 0.111808 |
| E31 | 76.90089612 | 18.80024 | 0.113352 | E93 | 65.79253583 | 17.37347 | 0.112397 |
| E32 | 71.9923398 | 18.14017 | 0.112921 | E94 | 56.59454914 | 16.36242 | 0.111662 |
| E33 | 68.79622059 | 17.73589 | 0.112648 | E95 | 68.42612576 | 17.69034 | 0.112617 |
| E34 | 65.1618612 | 17.29946 | 0.112345 | E96 | 57.29308486 | 16.43423 | 0.111716 |
| E35 | 68.50257104 | 17.69973 | 0.112623 | E97 | 68.62942977 | 17.71533 | 0.112634 |
| E36 | 50.94278784 | 15.8095 | 0.111233 | E98 | 64.43794353 | 17.21539 | 0.112286 |
| E37 | 68.2954034 | 17.67431 | 0.112606 | E99 | 37.23291012 | 15.95389 | 0.110896 |
| E38 | 69.07099484 | 17.76988 | 0.112671 | E100 | 46.22864351 | 15.76018 | 0.111051 |
| E39 | 59.54004114 | 16.67062 | 0.111892 | E101 | 38.67137498 | 15.92552 | 0.110917 |
| E40 | 60.66748548 | 16.79239 | 0.111982 | E102 | 45.10093328 | 15.78657 | 0.111029 |
| E41 | 62.38626651 | 16.98216 | 0.112119 | E103 | 43.97944456 | 15.81223 | 0.111007 |
| E42 | 79.39983431 | 19.15534 | 0.113577 | E104 | 58.66247102 | 16.57731 | 0.111823 |
| E43 | 68.74424364 | 17.72948 | 0.112644 | E105 | 60.17973696 | 16.73945 | 0.111943 |
| E44 | 55.83584185 | 16.2853 | 0.111603 | E106 | 65.24203037 | 17.30883 | 0.112352 |
| E45 | 68.510231 | 17.70067 | 0.112624 | E107 | 40.56361823 | 15.88669 | 0.110947 |
| E46 | 59.32127739 | 16.64724 | 0.111875 | E108 | 49.58371742 | 15.72205 | 0.111148 |
| E47 | 57.84378877 | 16.4914 | 0.111759 | E109 | 44.82151253 | 15.79302 | 0.111023 |
| E48 | 75.30364195 | 18.5801 | 0.11321 | E110 | 55.85845907 | 16.28759 | 0.111605 |
| E49 | 59.36328428 | 16.65172 | 0.111878 | E111 | 41.30786311 | 15.87095 | 0.11096 |
| E50 | 56.49318762 | 16.35206 | 0.111654 | E112 | 45.11674976 | 15.7862 | 0.111029 |
| E51 | 68.92906334 | 17.75231 | 0.112659 | E113 | 42.13887268 | 15.85305 | 0.110974 |
| E52 | 46.93096043 | 15.74345 | 0.111066 | E114 | 46.22405762 | 15.76029 | 0.111051 |
| E53 | 57.53866778 | 16.45967 | 0.111735 | E115 | 45.39548299 | 15.77973 | 0.111035 |
| E54 | 73.14258132 | 18.29051 | 0.11302 | E116 | 50.13771185 | 15.73468 | 0.111173 |
| E55 | 55.75764812 | 16.27741 | 0.111597 | E117 | 42.26006305 | 15.85041 | 0.110976 |
| E56 | 58.78379042 | 16.59013 | 0.111833 | E118 | 46.14836561 | 15.76208 | 0.11105 |
| E57 | 67.97748068 | 17.63545 | 0.112579 | E119 | 48.65135676 | 15.72198 | 0.111114 |
| E58 | 62.47912157 | 16.99256 | 0.112127 | E120 | 36.59596371 | 15.96613 | 0.110887 |
| E59 | 76.00231923 | 18.67575 | 0.113272 | E121 | 47.94368539 | 15.72173 | 0.111088 |
| E60 | 62.36278813 | 16.97954 | 0.112118 | E122 | 43.61785858 | 15.82037 | 0.111001 |
| E61 | 70.96657034 | 18.00828 | 0.112832 | E123 | 43.04225377 | 15.83321 | 0.11099 |
| E62 | 63.89863054 | 17.15337 | 0.112242 |
虽然把数据套进模型很简单,但是想要得到与论文一模一样的结果却是非常难的。对我的要求是处理方法和代码没有错误,运行结果符合预期即可。
我已经尽力跟着完整走一趟流程了。
---------------------------------------------------------------------------------------------------------------------------------
国赛2020C题305论文系列教程:
【day2】从零开始学数学建模-国赛2020C题305-思路_数学建模2020高教社杯c题论文-CSDN博客
【day3】从零开始学数学建模-国赛2020C题305-问题一-数据预处理_2020c国赛建模数据预处理-CSDN博客
【day4】从零开始学数学建模-国赛2020C题305-问题一-计算守约率-CSDN博客
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)