“两江游”轮船调度问题

15 篇文章 327 订阅 ¥39.90 ¥99.00

原创声明:未经作者允许,不得转载

免费条件:粉丝数、获赞数、收藏数,三者其一超过500
免费获取题目和代码,公众号后台回复:两江游
个人公众号

1. 一船/无等待

        问题一要求求解只有一艘游轮时该怎么安排它的航程,以及其一天的总载客量。这两个问题换句话说,就是游轮每次运载多少人和游轮每天总共运营多少次。该题明显是一个整数规划问题,因此,我们需要明确目标函数和约束条件。由第三问可知,第一问还有个隐含条件,就是此时的游客不愿意等待(第三问中,假设游客愿意等待10分钟)。
        老规矩,先上一张问题1的结果图。

图1-1 一船/无等待模型求解过程

1.1 模型建立

        假设游轮每次运载m人,游轮每天总共运营n次,那么我们的目标函数为:

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
“两江游轮船调度问题 某著名江边码头,位于长江和嘉陵江汇合之处,江面与两岸景色十分优美, 许多游客慕名而来,欣赏两江景色。当地轮船公司因此开设了“两江游”服务。 目前,“两江游”服务提供的游轮满载是 150 人,安排游船载客游览时间是 1.5 小时/次,票价为 25 元/人/次。另外,为了节约游客的时间成本,提高游客的 满意度,轮船公司规定:游轮不需要满载即可起航,但启航时游轮的载客量至少 要达到满载的 60%以上。 假定游客不等待,也就是当乘客到达时有游轮即上,没有游轮就离开。但游 客可以上船等待。根据统计,游客主要在上午 8 点到下午 6 点来参观游览,且在 早 8 点到晚 6 点时间段内,游客以平均每分钟 3 人的速度到达码头并参加“两江 游”。因此我们只考虑早上 8 点到晚上 6 点之间的游客。 从轮船公司角度出发,最希望的是每天收入最大。另外由于每次轮船运输有 成本,因此也希望每天总运输次数最少。同时轮船公司希望在总运载人数不变情 况下,每次运载的人数尽量均衡。从这三个方面出发,请建立数学模型并解决如 下问题,并运用数学建模中线性多目标规划知识给出matlab代码程序 1. 如果轮船公司只有 1 艘游轮,问该轮船如何安排航程?一天总载客量是多 少? 2. 若轮船公司有多艘轮船,问轮船公司最少需使用几艘游轮?分别如何安排 航程?每艘船载客量是多少? 注: 1. 早上 8 点前和晚上 6 点后的游客少,可以不予考虑。 2. 为计算方便,本题不考虑游客上下船时间。 3.对多艘轮船,如果后一艘到达时,前一艘还未启航,需要等待前一艘离开才允 许上客。但返回的船下客不受影响。 4.题目中轮船公司的收入特指票价收入,无需考虑游船的购买价格等因素。 5. 轮船启航时刻以整分钟为基本单位。
07-17
为了解决这个问题,我们可以使用线性多目标规划来建立数学模型。首先,我们需要确定决策变量、目标函数和约束条件。 决策变量: 1. 每艘游轮的航程安排:表示每艘游轮在一天内的航行次数和每次航行的载客量。 2. 游轮的总载客量:表示一天内所有游轮的总载客量。 目标函数: 1. 最大化收入:表示一天内票价收入的最大值。 2. 最小化总运输次数:表示一天内所有游轮的总运输次数的最小值。 3. 最小化每次运载人数的差异:表示每次运载人数的差异的最小值。 约束条件: 1. 游轮启航时间必须在早上8点到晚上6点之间。 2. 游轮的载客量必须达到满载的60%以上。 3. 一天内每个时间段的游客到达速度为平均每分钟3人。 4. 游轮的载客量必须小于等于满载量。 根据以上建模思路,我们可以使用MATLAB代码实现该模型并求解最优解。以下是一个简化的代码示例: ```matlab % 定义参数 num_ships = 1; % 轮船数量 capacity_per_ship = 150; % 每艘轮船的满载量 time_slots = 8*60:6*60; % 时间段范围,从早上8点到晚上6点 num_time_slots = length(time_slots); % 时间段数量 arrival_rate = 3; % 平均每分钟到达游客数量 % 定义决策变量 x = binvar(num_ships, num_time_slots, 'full'); % 轮船航程安排,取值为0或1 y = intvar(num_ships, num_time_slots, 'full'); % 每次航行的载客量 % 定义目标函数 income = sum(sum(y))*25; % 收入 num_trips = sum(sum(x)); % 总运输次数 diff_per_trip = abs(diff(sum(y)))/num_time_slots; % 每次运载人数的差异 % 定义约束条件 constraints = []; % 游轮启航时间必须在早上8点到晚上6点之间 for i = 1:num_time_slots constraints = [constraints, sum(x(:, i)) <= 1]; end % 游轮的载客量必须达到满载的60%以上 for i = 1:num_ships for j = 1:num_time_slots constraints = [constraints, y(i, j) >= 0.6*capacity_per_ship*x(i, j)]; end end % 一天内每个时间段的游客到达速度为平均每分钟3人 for i = 1:num_time_slots constraints = [constraints, sum(sum(x(:, 1:i))) <= arrival_rate*(time_slots(i)-time_slots(1)+1)]; end % 游轮的载客量必须小于等于满载量 for i = 1:num_ships for j = 1:num_time_slots constraints = [constraints, y(i, j) <= capacity_per_ship]; end end % 求解模型 options = sdpsettings('solver', 'linprog'); optimize(constraints, -income, options); % 输出结果 disp(value(income)); % 输出收入 disp(value(num_trips)); % 输出总运输次数 disp(value(diff_per_trip)); % 输出每次运载人数的差异 ``` 根据实际需求,你可以根据以上代码进行调整和扩展,以适应不同的情况和约束条件。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

适当喝点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值