前言

前面对数据进行预处理,求得123家企业的守约率,现在需要根据已有数据建立有信贷记录的银行多目标规划模型。

模型的具体建立过程请看参考论文2020全国大学生数学建模竞赛论文展示(C305) - 2020全国大学生数学建模竞赛论文展示 - 中国大学生在线此处摘录模型的公式:


多目标规划模型

论文用的是Lingo求解,但我没有安装这个软件(其实是不想下载),所以继续用Matlab。

Lingo的使用方法贴在这里,有需要自取。

最优化方法(基于lingo)之 目标规划问题求解(6/6)_lingo求解多目标线性规划-CSDN博客

下面是论文最后面找到的Lingo多目标规划模型的求解方法:


代码实现

Matlab求解多目标规划模型的教程有很多,这里我贴出一些我认为较好的帖子,有兴趣可以自行练习。

数模3—Matlab线性规划、非线性规划、多目标规划(超全解法合集)-CSDN博客

【MATLAB】求解约束条件下的目标函数最值(fmincon用法解析)_fmincon函数用法-CSDN博客

matlab求解多目标规划问题 - 卢宇博 - 博客园

先前没有接触过多目标规划模型,学习了一通,我还是不会用Matlab求解(主要是这个对于初学者的我而言过于复杂了)。

在比赛的时候不建议再继续学了,要么自觉下载Lingo,要么就要请出 世纪最强后援、代码小帮手——AI,辅助我们解决问题。

再次重申,在比赛的时候不要随便用AI不要随便用AI不要随便用AI,(重要的话说三遍)。

具体要求请看“全国大学生数学建模竞赛人工智能工具使用规定 (2025 年试行)”

全国大学生数学建模竞赛 (mcm.edu.cn)

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博客

【day5】从零开始学数学建模-国赛2020C题305-问题一-贷款策略-多目标规划模型-CSDN博客

【day6】从零开始学数学建模-国赛2020C题305-问题二-全流程-CSDN博客

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐