机理建模问题在国赛中的占比呈上升趋势,近年来的题目有重庆交警平台设置、打车软件补贴优化、开放小区等问题, 本讲将以 2015 年的打车软件问题为例,介绍 MATLAB 在这类问题中的求解过程。

所介绍的 MATLAB 案例是获得 2015 年国赛 ”MATLAB创新奖” 的程序, 所用的求解方法也是比较典型的机理建模方法。

1. 问题重述

1.1 背景资料与条件

出租车是市民出行的重要交通工具之一,“打车难”是人们关注的一个社会 热点问题。随着“互联网+”时代的到来,有多家公司依托移动互联网建立了打 车软件服务平台,实现了乘客与出租车司机之间的信息互通,同时推出了多种出 租车的补贴方案。

1.2 需要解决的问题

(1)试建立合理的指标,并分析不同时空出租车资源的“供求匹配”程度。 (2)分析各公司的出租车补贴方案是否对“缓解打车难”有帮助。 (3)如果要创建一个新的打车软件服务平台,你们将设计什么样的补贴方案,并论证其合理性。

2. 建模与求解思路

(1) 首先要找到合理的指标;

(2) 采用机理仿真方式对打车的流程中乘客和出租车的行为进行仿真;

(3) 计算整个打车系统中的指标,优化打车方案,具体实现的主要代码如下:

%% 2015 CUMCM

clc, clear, close all

%% 数据结构设计

% passengers:

% [出发点横坐标,出发点纵坐标,目的地横坐标,目的地纵坐标,出行里程]

% 即[xs,ys,xd,yd,l]

% taxis

% [出租车位置横坐标,出租车位置纵坐标,出租车被占用里程]

% 即[x_taxi,y_taxi,lo]

%%

r_valid = 2/10;%出租车有效覆盖半径

xmax = 111*cos(pi*34/180)*1.4;

ymax = 0.7*111;

xmax = xmax/10;

ymax = ymax/10;

psnger_total = 80;

taxi_total = 152;

%先生成5000个出发点

for i = 1:psnger_total

passengers(i,:) = gen_passenger();

end

for i = 1:taxi_total

taxis(i,:) = gen_taxi();

end

figure

scatter(taxis(:,1)*10,taxis(:,2)*10)

xlabel(‘x(km)‘)

ylabel(‘y(km)‘)

all_B = [];

all_K = [];

for i = 1:200

%% 首先更新出租车状态

lc = taxis(:,3) - 0.01;%出租车被占用里程

lc(lc < 0) = 0;

taxis(:,3) = lc;

%空车随机一个方向前进0.01

valid_lines = find( lc == 0 );

all_K = [all_K,1-length(valid_lines)/taxi_total];

for m = 1:length(valid_lines)

k = valid_lines(m);

while(1)

degree = 2*pi*rand();%出行方向

new_x = taxis(k,1) + 0.01.*cos(degree);

new_y = taxis(k,2) + 0.01.*sin(degree);

if(new_x>=0 && new_x<=xmax && new_y>=0 && new_y<=ymax)

taxis(k,1:2) = [new_x,new_y];

break

end

end

end

%% 乘客加入系统

add_passengers_total = 4;%round(normrnd(10,3));

add_passengers = zeros(add_passengers_total,5);

for n = 1:add_passengers_total

add_passengers(n,:) = gen_passenger();

end

passengers = [passengers;add_passengers];

%% 计算各乘客视野内出租车数目

for j = 1:length(passengers)

p = passengers(j,:);

if isnan(p(1))

continue

end

temp_taxis = taxis;

%被占用的出租车不参与打车

invalid_lines = find(temp_taxis(:,3)>0);

temp_taxis(invalid_lines,:) = nan;

%% 然后是乘客乘车

r = sqrt((temp_taxis(:,1)-p(1)).^2+(temp_taxis(:,2)-p(2)).^2);

taxi_num = find(r<r_valid);%视野范围内的车辆

if isempty(taxi_num)%视野内没有车,下一位乘客

continue;

else

%随机选一辆乘坐

index = round(rand()*(length(taxi_num)-1))+1;

taxi_num = taxi_num(index);

taxis(taxi_num,3) = p(5) + sqrt((taxis(taxi_num,1)-p(1))^2+(taxis(taxi_num,2)-p(2))^2);%此乘客p乘坐的出租车被占用

taxis(taxi_num,1) = p(3);taxis(taxi_num,2) = p(4);%将其更新到目的地

passengers(j,:) = nan;%更新乘客状态,上车的乘客变为nan,移出系统

end

end

all_B = [all_B,calcu_b(passengers,taxis)];

end

figure

hold on

scatter(taxis(:,1)*10,taxis(:,2)*10,’g*‘)

legend(‘初始位置‘,’一段时间后位置‘)

%20次演化后才得到平时状态,故只保留20次之后的数据

pos = (20:length(all_B));

figure

plot((pos-20)/4.5,all_B(pos));

xlabel(‘时间(分钟)’)

ylabel(‘数目不平衡度‘)

figure

plot((pos-20)/4.5,all_K(pos));

xlabel(‘时间(分钟)’)

ylabel(‘里程利用率‘)

figure

res = sqrt( ((all_K-0.66)./0.66).^2 + (all_B-1).^2 );

plot((pos-20)/4.5,res(pos));

xlabel(‘时间(分钟)’)

ylabel(‘供需不平衡度‘)

程序的仿真结果如图 1、图 2 所示。

图 1 出租车初始位置

图 2 评价指标随时间的变化趋势图

3. 点评

本问题如果按照传统的建模方法, 无论是建模还是求解难度都比较大, 但如果采用元胞自动机思想的仿真法,就可以利用系统的方法对整个系统进行仿真,再通过参数优化得到最佳的补贴。

程序本身虽然还有不少可以改进的地方, 但总的来说, 程序的建模思路清晰, 程序框架和模块的构造都比较合理, 编程中使用了分节、注释、变量预定义、函数定义等方法, 使得整个程序既具备良好的功能性,也体现了可读性、性能提升等程序开发细节, 在三天时间内能达到这个水平, 确实不容易。

当然在此基础上还有不少可以提升、拓展的空间, 比如如何在此程序基础上结合不同的城市或区域,仿真出更真实的打车情况, 另外,还可以在指标上拓展思路, 比如一个指标还是有些偏面,但既然可以做仿真, 各种指标都可以仿真出来, 对提升整个建模水平还是比较有帮助的。

数学建模专栏 | 第十二篇:MATLAB CUMCM真题求解实例三:机理建模型相关推荐

  1. 【数学建模】十二(最后一篇):MATLAB CUMCM真题求解实例三:机理建模型

    机理建模问题在国赛中的占比呈上升趋势,近年来的题目有重庆交警平台设置.打车软件补贴优化.开放小区等问题, 本讲将以 2015 年的打车软件问题为例,介绍 MATLAB 在这类问题中的求解过程. 所介绍 ...

  2. 数学建模专栏 | 第十篇:MATLAB CUMCM真题求解实例一:数据型

    本讲针对的题型是数据型的建模问题, 2012 年的 A 题就是一道典型这类问题,接下来将介绍这道题的 MATLAB 求解过程. 1. 问题的提出 确定葡萄酒质量时一般是通过聘请一批有资质的评酒员进行品 ...

  3. 【数学建模】十:MATLAB CUMCM真题求解实例一:数据型

    本讲针对的题型是数据型的建模问题, 2012 年的 A 题就是一道典型这类问题,接下来将介绍这道题的 MATLAB 求解过程. 1. 问题的提出 确定葡萄酒质量时一般是通过聘请一批有资质的评酒员进行品 ...

  4. matlab最优控制实验报告_第十二篇 章 用MATLAB解最优控制问题及应用实例 最优控制课件.ppt...

    第十二篇 章 用MATLAB解最优控制问题及应用实例 最优控制课件.ppt 综上所述可得结论:Q=diag(1,0,0),R=2时,系统各方面响应较好. 矩阵Q变大时,反馈矩阵变大: 当Q的对角线上第 ...

  5. MySQL数据库,从入门到精通:第十二篇——MySQL数据类型详解

    MySQL数据库,从入门到精通:第十二篇--MySQL数据类型详解 第 12 章_MySQL数据类型精讲 1. MySQL中的数据类型 2. 整数类型 2. 1 类型介绍 2. 2 可选属性 2. 2 ...

  6. 打包文档_苏教版小学数学16年级全十二册教案Word文档打包下载

    扫码查看下载 全部资源 部编小学语文1-6年级课程资料汇总苏教版小学数学1-6年级教学资料汇编苏教版小学数学1-6年级电子课本汇编苏教版小学数学1-6年级期末试题卷汇编▼ 1 年级 苏教版一年级数学上 ...

  7. CCIE-LAB-第十二篇-EIGRP+EIGRP末节区域+leak map+分发列表

    CCIE-LAB-第十二篇-EIGRP+EIGRP末节区域+leak map+分发列表 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 翻译:1.确保分支3分支4 ...

  8. CCNA-第十二篇-STP+ACL(下)

    CCNA-第十二篇-STP+ACL(下) 首先说说要跳跳了 立个小FLAG, 两个月内急速完成CCIE理论+LAB实操 因为接了个工作,主要我能做到就能做这份工作. 其实NP中间的点很多都会,只是因为 ...

  9. CCIE理论-第十二篇-IPV6-NDP协议

    CCIE理论-第十二篇-IPV6-NDP协议 首先我们知道 在IPV4中 A:0.0.0.1-126.255.255.255 B:128.0.0.1-191.255.255.255 C:192.0.0 ...

最新文章

  1. CV_8UCV_32FCV_32S
  2. 提权学习之旅——利用Metasploit提权
  3. 创建Git仓库的三种形式
  4. 人群计数(Crowd Counting)研究综述
  5. mysql cast numeric,mysql decimal、
  6. 关于控件开发的几点意见
  7. linux下c程序调用reboot函数实现直接重启【转】
  8. 机器学习算法:K近邻(k-nearest neighbors)
  9. WINVNC源码阅读(一)
  10. 王老六计算机,crc校验和累加和校验哪个好
  11. 戴尔笔记本插耳机听歌暂停后继续声音突然变大
  12. 高新技术企业认定专项审计报告包含报告?专审收费标准
  13. 取消参考文献自动编号_word文档参考文献如何自动编号
  14. Erro和Exception区别Throw和Throws的区别
  15. mysql 围栏_一个电子围栏需求的脚本记录
  16. [晓说]程序员的十层楼
  17. 金仓数据库字段_mysql迁移到金仓数据库(V8R3)
  18. 用户sa登陆失败时,应该如何解决
  19. matlab波形的thd波形,Matlab图片处理函数小记
  20. abaqus java 二次开发_Abaqus二次开发介绍

热门文章

  1. 深度信念网络python_PyBrain如何做深度信念网络训练?
  2. 基础前端之JavaScript
  3. steam搬砖项目,csgo游戏搬砖熟练操作后,可以月入过万~
  4. 【石头和爸爸】早晨一刻钟
  5. 美赛题目英语翻译练习
  6. JavaScript性能优化详解
  7. 文献翻译__人工智能时代医学图像重建中的凸优化算法(第4、5、6章)
  8. ubuntu安装todesk远程控制简明教程
  9. 72本值得一读再读的书
  10. 算法分析渐进符号(O、o、Θ、Ω、ω)总结