import random
from ortools.linear_solver import pywraplp
# 船只类型和数量
ships = {
'散货船': 30,
'集装箱船': 20,
'液化气船': 10
}
# 码头类型和数量
docks = {
'散货码头': {'容量': 4, '停靠时间限制': 8},
'集装箱码头': {'容量': 3, '停靠时间限制': 12},
'液化气码头': {'容量': 2, '停靠时间限制': 16}
}
# 港口的运营成本和收益
operating_cost = 100000 # 每日运营成本
earnings = {
'散货船': 150000,
'集装箱船': 200000,
'液化气船': 250000
}
# 船只的到达和离开时间表
arrival_departure_table = {
'散货船': {'到达': 10, '离开': 6},
'集装箱船': {'到达': 6, '离开': 8},
'液化气船': {'到达': 3, '离开': 10}
}
# 船只之间的优先级
priority_order = ['散货船', '集装箱船', '液化气船']
# 根据船只到达和离开的时间表,生成船只的到达和离开时间
def generate_schedule(ship_type):
arrival_time = random.randint(1, arrival_departure_table[ship_type]['到达'])
departure_time = arrival_time + random.randint(1, arrival_departure_table[ship_type]['离开'])
return arrival_time, departure_time
# 计算总等待时间和总延迟时间
def calculate_waiting_delay(schedule, ship_type, dock_type):
dock_capacity = docks[dock_type]['容量']
time_limit = docks[dock_type]['停靠时间限制']
arrival_time, departure_time = schedule[ship_type][dock_type]
waiting_time = max(0, arrival_time - dock_capacity)
delay_time = max(0, departure_time - time_limit)
return waiting_time, delay_time
# 定义线性规划模型
solver = pywraplp.Solver.CreateSolver('SCIP')
# 定义变量
waiting_vars = {}
delay_vars = {}
load_vars = {}
earnings_vars = {}
for ship_type in ships:
for dock_type in docks:
waiting_vars[(ship_type, dock_type)] = solver.IntVar(0, solver.infinity(), 'waiting_{0}_{1}'.format(ship_type, dock_type))
delay_vars[(ship_type, dock_type)] = solver.IntVar(0, solver.infinity(), 'delay_{0}_{1}'.format(ship_type, dock_type))
load_vars[(ship_type, dock_type)] = solver.IntVar(0, solver.infinity(), 'load_{0}_{1}'.format(ship_type, dock_type))
earnings_vars[(ship_type, dock_type)] = solver.BoolVar('earnings_{0}_{1}'.format(ship_type, dock_type))
# 定义约束条件
for ship_type in ships:
for dock_type in docks:
dock_capacity = docks[dock_type]['容量']
solver.Add(load_vars[(ship_type, dock_type)] <= dock_capacity)
solver.Add(load_vars[(ship_type, dock_type)] >= ships[ship_type] - dock_capacity)
solver.Add(waiting_vars[(ship_type, dock_type)] >= 0)
solver.Add(waiting_vars[(ship_type, dock_type)] >= ships[ship_type] - dock_capacity)
solver.Add(delay_vars[(ship_type, dock_type)] >= 0)
solver.Add(delay_vars[(ship_type, dock_type)] >= ships[ship_type] - dock_capacity)
solver.Add(earnings_vars[(ship_type, dock_type)] * earnings[ship_type] >= operating_cost)
# 定义目标函数
objective = solver.Objective()
for ship_type in ships:
for dock_type in docks:
waiting_time_coefficient = 1 # 控制等待时间的权重
delay_time_coefficient = 1 # 控制延迟时间的权重
earnings_coefficient = 1 # 控制收益的权重
objective.SetCoefficient(waiting_vars[(ship_type, dock_type)], waiting_time_coefficient)
objective.SetCoefficient(delay_vars[(ship_type, dock_type)], delay_time_coefficient)
objective.SetCoefficient(earnings_vars[(ship_type, dock_type)], -earnings_coefficient)
objective.SetMinimization()
# 求解线性规划模型
status = solver.Solve()
# 打印结果
if status == pywraplp.Solver.OPTIMAL:
print('总等待时间:', sum(waiting_vars[(ship_type, dock_type)].solution_value() for ship_type in ships for dock_type in docks))
print('总延迟时间:', sum(delay_vars[(ship_type, dock_type)].solution_value() for ship_type in ships for dock_type in docks))
print('总收益:', -objective.Value())
print('每个码头的使用情况:')
for dock_type in docks:
total_load = sum(load_vars[(ship_type, dock_type)].solution_value() for ship_type in ships)
print(dock_type, ':', total_load, '船只')
else:
print('无法找到最优解')
# 打印每个船只的到达和离开时间
print('每个船只的到达和离开时间:')
schedule = {}
for ship_type in ships:
schedule[ship_type] = {}
for dock_type in docks:
schedule[ship_type][dock_type] = generate_schedule(ship_type)
arrival_time, departure_time = schedule[ship_type][dock_type]
print(ship_type, dock_type, ':', '到达:', arrival_time, '离开:', departure_time)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
c题.rar (26个子文件)
c题
港口的负载和运营效率数据.xlsx 9KB
1.py 3KB
2.py 3KB
船只的种类和数量.xlsx 9KB
2_3.py 2KB
每艘船只停靠所需的时间.xlsx 9KB
3_5.py 3KB
码头的类型和数量.xlsx 9KB
3-4.py 3KB
1_2.py 3KB
问题.py 5KB
船只信息.xlsx 6KB
2_5.py 4KB
1_4.py 2KB
港口的运营成本和收益.xlsx 9KB
船只的到达和离开时间表.xlsx 9KB
2_4.py 2KB
terminal_assignments.xlsx 5KB
1_3.py 4KB
ship_schedule_process.xlsx 7KB
2_6.py 3KB
3_2.py 3KB
3_3.py 3KB
每个码头的容量和停靠时间限制.xlsx 9KB
2_2.py 2KB
3.py 3KB
共 26 条
- 1
资源评论
张謹礧
- 粉丝: 2w+
- 资源: 240
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 11111111111111111111111111111
- 基于JavaScript和CSS的吉林大学育苗支教2017年甘肃队项目设计源码
- 基于Flask框架的个人新闻博客系统设计源码
- 基于PHP的DBErp进销存系统设计源码
- CCFA&德勤&微盟:2023零售连锁品牌数字化运营研究及策略报告
- 永磁同步电机PMSM电机5+7次谐波注入,可以有效降低转矩脉动 死区补偿后,有效降低转矩脉动 电压补偿 有ppt说明,文章
- 基于HTML的子政页面小作业设计源码
- 基于Python的Struts2漏洞扫描工具设计源码
- 基于HTML、CSS、JavaScript的多格式文件转PDF及图片预览设计源码
- 基于Java语言的校园卡管理系统设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功