Commit 1fead6cf authored by Allvey's avatar Allvey

出入场时间

parent 882a1c66
# Default ignored files
/workspace.xml
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$/../WatoDisp-master" />
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.7 (waytous)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="pytest" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (waytous)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/integrated-scheduling.iml" filepath="$PROJECT_DIR$/.idea/integrated-scheduling.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
...@@ -2396,3 +2396,1131 @@ FROM park_load_distance] ...@@ -2396,3 +2396,1131 @@ FROM park_load_distance]
2021-08-04 16:02:18,937 - settings: ERROR '31c1c93a-b037-4ab6-88b6-eef6cd23804b' 2021-08-04 16:02:18,937 - settings: ERROR '31c1c93a-b037-4ab6-88b6-eef6cd23804b'
2021-08-04 16:02:18,937 - settings: ERROR 卸载设备预计装载量计算异常 2021-08-04 16:02:18,937 - settings: ERROR 卸载设备预计装载量计算异常
2021-08-04 16:02:18,937 - settings: ERROR '31c1c93a-b037-4ab6-88b6-eef6cd23804b' 2021-08-04 16:02:18,937 - settings: ERROR '31c1c93a-b037-4ab6-88b6-eef6cd23804b'
2021-08-04 16:03:38,709 - settings: INFO 最大产量调度模式
2021-08-04 16:03:38,723 - settings: INFO 最大产量:179.21176
2021-08-04 16:03:38,723 - settings: INFO 各变量取值:
2021-08-04 16:03:38,723 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:03:38,723 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:03:38,899 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:03:38,899 - settings: INFO {'5f010e86-3398-4f88-a0e7-27d104cc8bbd', 'f68909a0-e644-415f-a140-15c19f162b8f', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', '9b251c39-42e8-4071-9a1f-d36625555513', '5221a7f5-0a90-482f-b2bd-c902110a792d', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', 'aae4642f-f74b-4514-971e-c800a4182152', 'fb1d5516-9a42-4f6e-84fe-9955723badce'}
2021-08-04 16:03:39,001 - settings: INFO
2021-08-04 16:03:39,001 - settings: INFO 调度系统启动
2021-08-04 16:03:39,437 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:03:40,013 - settings: INFO 矿卡当前任务:
2021-08-04 16:03:40,013 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:03:43,060 - settings: INFO 最大产量调度模式
2021-08-04 16:03:43,071 - settings: INFO 最大产量:179.21176
2021-08-04 16:03:43,071 - settings: INFO 各变量取值:
2021-08-04 16:03:43,071 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:03:43,071 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:03:43,072 - settings: INFO
2021-08-04 16:03:43,072 - settings: INFO 调度矿卡 5f010e86-3398-4f88-a0e7-27d104cc8bbd KK008
2021-08-04 16:03:43,072 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,072 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,072 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,072 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,072 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,073 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,073 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,073 - settings: INFO
2021-08-04 16:03:43,073 - settings: INFO 调度矿卡 f68909a0-e644-415f-a140-15c19f162b8f KK004
2021-08-04 16:03:43,073 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,073 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,073 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,073 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,073 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,073 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,073 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,074 - settings: INFO
2021-08-04 16:03:43,074 - settings: INFO 调度矿卡 31c1c93a-b037-4ab6-88b6-eef6cd23804b XDE120-8
2021-08-04 16:03:43,074 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,074 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,074 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,074 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,074 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,074 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,074 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,074 - settings: INFO
2021-08-04 16:03:43,075 - settings: INFO 调度矿卡 1b787c4a-210a-46ce-a32c-73cbc1cd5e39 KK007
2021-08-04 16:03:43,075 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,075 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,075 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,075 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,075 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,075 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,075 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,075 - settings: INFO
2021-08-04 16:03:43,075 - settings: INFO 调度矿卡 fa028808-a3f0-47dd-9929-f23e2cac2bf8 KK005
2021-08-04 16:03:43,075 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,075 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,076 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,076 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,076 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,076 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,076 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,076 - settings: INFO
2021-08-04 16:03:43,076 - settings: INFO 调度矿卡 35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19 KK006
2021-08-04 16:03:43,076 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,076 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,076 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,076 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,077 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,077 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,077 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,077 - settings: INFO
2021-08-04 16:03:43,077 - settings: INFO 调度矿卡 9b251c39-42e8-4071-9a1f-d36625555513 验证bug
2021-08-04 16:03:43,077 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,077 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,077 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,077 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,077 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,078 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,078 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,078 - settings: INFO
2021-08-04 16:03:43,078 - settings: INFO 调度矿卡 5221a7f5-0a90-482f-b2bd-c902110a792d NTE200-4(18#)
2021-08-04 16:03:43,078 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,078 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,078 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,078 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,078 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,078 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,078 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,079 - settings: INFO
2021-08-04 16:03:43,079 - settings: INFO 调度矿卡 e0118ce2-7644-4f6e-aadc-8e0c33b11241 KK003
2021-08-04 16:03:43,079 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,079 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,079 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,079 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,079 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,079 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,079 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,079 - settings: INFO
2021-08-04 16:03:43,079 - settings: INFO 调度矿卡 dd8f0405-1ade-4d23-8985-2a1e603c5c2a KK002
2021-08-04 16:03:43,080 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,080 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,080 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,080 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,080 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,080 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,080 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,080 - settings: INFO
2021-08-04 16:03:43,080 - settings: INFO 调度矿卡 aae4642f-f74b-4514-971e-c800a4182152 KK010
2021-08-04 16:03:43,080 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,080 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,080 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,081 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,081 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,081 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,081 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,081 - settings: INFO
2021-08-04 16:03:43,081 - settings: INFO 调度矿卡 fb1d5516-9a42-4f6e-84fe-9955723badce KK001
2021-08-04 16:03:43,081 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:03:43,081 - settings: INFO 矿卡行程:无
2021-08-04 16:03:43,081 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:03:43,081 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:03:43,082 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:03:43,082 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:03:43,082 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:03:43,401 - settings: INFO #####################################周期更新结束#####################################
2021-08-04 16:04:39,505 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:04:40,494 - settings: INFO 矿卡当前任务:
2021-08-04 16:04:40,494 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:04:43,538 - settings: INFO 最大产量调度模式
2021-08-04 16:04:43,550 - settings: INFO 最大产量:179.21176
2021-08-04 16:04:43,550 - settings: INFO 各变量取值:
2021-08-04 16:04:43,550 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:04:43,550 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:04:43,551 - settings: INFO
2021-08-04 16:04:43,551 - settings: INFO 调度矿卡 5f010e86-3398-4f88-a0e7-27d104cc8bbd KK008
2021-08-04 16:04:43,551 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,551 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,551 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,551 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,551 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,551 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,551 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,551 - settings: INFO
2021-08-04 16:04:43,551 - settings: INFO 调度矿卡 f68909a0-e644-415f-a140-15c19f162b8f KK004
2021-08-04 16:04:43,552 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,552 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,552 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,552 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,552 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,552 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,552 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,552 - settings: INFO
2021-08-04 16:04:43,552 - settings: INFO 调度矿卡 31c1c93a-b037-4ab6-88b6-eef6cd23804b XDE120-8
2021-08-04 16:04:43,552 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,553 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,553 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,553 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,553 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,553 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,553 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,553 - settings: INFO
2021-08-04 16:04:43,553 - settings: INFO 调度矿卡 1b787c4a-210a-46ce-a32c-73cbc1cd5e39 KK007
2021-08-04 16:04:43,553 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,553 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,553 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,554 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,554 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,554 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,554 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,554 - settings: INFO
2021-08-04 16:04:43,554 - settings: INFO 调度矿卡 fa028808-a3f0-47dd-9929-f23e2cac2bf8 KK005
2021-08-04 16:04:43,554 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,555 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,555 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,555 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,555 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,555 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,555 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,555 - settings: INFO
2021-08-04 16:04:43,555 - settings: INFO 调度矿卡 35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19 KK006
2021-08-04 16:04:43,555 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,555 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,555 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,556 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,556 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,556 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,556 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,556 - settings: INFO
2021-08-04 16:04:43,556 - settings: INFO 调度矿卡 9b251c39-42e8-4071-9a1f-d36625555513 验证bug
2021-08-04 16:04:43,556 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,556 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,556 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,556 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,556 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,557 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,557 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,557 - settings: INFO
2021-08-04 16:04:43,557 - settings: INFO 调度矿卡 5221a7f5-0a90-482f-b2bd-c902110a792d NTE200-4(18#)
2021-08-04 16:04:43,557 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,557 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,557 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,557 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,557 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,557 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,557 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,558 - settings: INFO
2021-08-04 16:04:43,558 - settings: INFO 调度矿卡 e0118ce2-7644-4f6e-aadc-8e0c33b11241 KK003
2021-08-04 16:04:43,558 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,558 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,558 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,558 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,558 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,558 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,558 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,558 - settings: INFO
2021-08-04 16:04:43,558 - settings: INFO 调度矿卡 dd8f0405-1ade-4d23-8985-2a1e603c5c2a KK002
2021-08-04 16:04:43,559 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,559 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,559 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,559 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,559 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,559 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,559 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,559 - settings: INFO
2021-08-04 16:04:43,559 - settings: INFO 调度矿卡 aae4642f-f74b-4514-971e-c800a4182152 KK010
2021-08-04 16:04:43,559 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,559 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,559 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,560 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,560 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,560 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,560 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:43,560 - settings: INFO
2021-08-04 16:04:43,560 - settings: INFO 调度矿卡 fb1d5516-9a42-4f6e-84fe-9955723badce KK001
2021-08-04 16:04:43,560 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:04:43,560 - settings: INFO 矿卡行程:无
2021-08-04 16:04:43,560 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:04:43,560 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:04:43,561 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:04:43,561 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:04:43,561 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:04:44,007 - settings: INFO #####################################周期更新结束#####################################
2021-08-04 16:08:16,033 - settings: INFO 最大产量调度模式
2021-08-04 16:08:16,047 - settings: INFO 最大产量:179.21176
2021-08-04 16:08:16,047 - settings: INFO 各变量取值:
2021-08-04 16:08:16,047 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:08:16,047 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:08:16,113 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:08:16,113 - settings: INFO {'35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', 'aae4642f-f74b-4514-971e-c800a4182152', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', 'fb1d5516-9a42-4f6e-84fe-9955723badce', '9b251c39-42e8-4071-9a1f-d36625555513', '5f010e86-3398-4f88-a0e7-27d104cc8bbd', '5221a7f5-0a90-482f-b2bd-c902110a792d', 'f68909a0-e644-415f-a140-15c19f162b8f', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8'}
2021-08-04 16:08:16,203 - settings: INFO
2021-08-04 16:08:16,203 - settings: INFO 调度系统启动
2021-08-04 16:08:16,536 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:08:17,146 - settings: INFO 矿卡当前任务:
2021-08-04 16:08:17,146 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:08:20,766 - settings: INFO 最大产量调度模式
2021-08-04 16:08:20,781 - settings: INFO 最大产量:179.21176
2021-08-04 16:08:20,781 - settings: INFO 各变量取值:
2021-08-04 16:08:20,782 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:08:20,782 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:08:20,782 - settings: INFO
2021-08-04 16:08:20,782 - settings: INFO 调度矿卡 35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19 KK006
2021-08-04 16:08:20,783 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,783 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,783 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,783 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,783 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,783 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,783 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,784 - settings: INFO
2021-08-04 16:08:20,784 - settings: INFO 调度矿卡 aae4642f-f74b-4514-971e-c800a4182152 KK010
2021-08-04 16:08:20,784 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,784 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,784 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,784 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,784 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,784 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,784 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,785 - settings: INFO
2021-08-04 16:08:20,785 - settings: INFO 调度矿卡 dd8f0405-1ade-4d23-8985-2a1e603c5c2a KK002
2021-08-04 16:08:20,785 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,785 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,785 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,785 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,785 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,785 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,785 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,786 - settings: INFO
2021-08-04 16:08:20,786 - settings: INFO 调度矿卡 fb1d5516-9a42-4f6e-84fe-9955723badce KK001
2021-08-04 16:08:20,786 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,786 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,786 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,786 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,786 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,786 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,786 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,787 - settings: INFO
2021-08-04 16:08:20,787 - settings: INFO 调度矿卡 9b251c39-42e8-4071-9a1f-d36625555513 验证bug
2021-08-04 16:08:20,787 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,787 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,787 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,787 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,787 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,787 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,788 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,788 - settings: INFO
2021-08-04 16:08:20,788 - settings: INFO 调度矿卡 5f010e86-3398-4f88-a0e7-27d104cc8bbd KK008
2021-08-04 16:08:20,788 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,788 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,788 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,788 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,788 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,789 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,789 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,789 - settings: INFO
2021-08-04 16:08:20,789 - settings: INFO 调度矿卡 5221a7f5-0a90-482f-b2bd-c902110a792d NTE200-4(18#)
2021-08-04 16:08:20,789 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,789 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,789 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,789 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,789 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,790 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,790 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,790 - settings: INFO
2021-08-04 16:08:20,790 - settings: INFO 调度矿卡 f68909a0-e644-415f-a140-15c19f162b8f KK004
2021-08-04 16:08:20,790 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,790 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,790 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,790 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,791 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,791 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,791 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,791 - settings: INFO
2021-08-04 16:08:20,791 - settings: INFO 调度矿卡 31c1c93a-b037-4ab6-88b6-eef6cd23804b XDE120-8
2021-08-04 16:08:20,791 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,791 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,791 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,791 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,792 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,792 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,792 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,792 - settings: INFO
2021-08-04 16:08:20,792 - settings: INFO 调度矿卡 e0118ce2-7644-4f6e-aadc-8e0c33b11241 KK003
2021-08-04 16:08:20,793 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,793 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,793 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,793 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,793 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,794 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,794 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,794 - settings: INFO
2021-08-04 16:08:20,794 - settings: INFO 调度矿卡 1b787c4a-210a-46ce-a32c-73cbc1cd5e39 KK007
2021-08-04 16:08:20,794 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,794 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,794 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,794 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,795 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,795 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,795 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:20,795 - settings: INFO
2021-08-04 16:08:20,795 - settings: INFO 调度矿卡 fa028808-a3f0-47dd-9929-f23e2cac2bf8 KK005
2021-08-04 16:08:20,795 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:08:20,795 - settings: INFO 矿卡行程:无
2021-08-04 16:08:20,795 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:08:20,796 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:08:20,796 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:08:20,796 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:08:20,796 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:08:21,362 - settings: INFO #####################################周期更新结束#####################################
2021-08-04 16:20:57,246 - settings: ERROR (psycopg2.OperationalError) could not connect to server: Connection timed out (0x0000274C/10060)
Is the server running on host "192.168.28.111" and accepting
TCP/IP connections on port 5432?
(Background on this error at: http://sqlalche.me/e/14/e3q8)
2021-08-04 16:21:13,181 - settings: ERROR (psycopg2.OperationalError) could not connect to server: Software caused connection abort (0x00002745/10053)
Is the server running on host "192.168.28.111" and accepting
TCP/IP connections on port 5432?
(Background on this error at: http://sqlalche.me/e/14/e3q8)
2021-08-04 16:21:13,219 - settings: WARNING (mysql.connector.errors.InterfaceError) 2003: Can't connect to MySQL server on '192.168.28.111:3306' (10065 套接字操作尝试一个无法连接的主机。)
(Background on this error at: http://sqlalche.me/e/14/rvf5)
2021-08-04 16:21:13,952 - settings: ERROR 矿卡KK005所在路段信息读取异常
2021-08-04 16:21:13,964 - settings: ERROR 矿卡KK005实时速度读取异常
2021-08-04 16:21:13,964 - settings: ERROR 'KK005'
2021-08-04 16:21:14,340 - settings: ERROR 路网信息计成本计算异常
2021-08-04 16:21:14,340 - settings: ERROR 'e5d0ac4e-c134-3ef1-901b-867980c8453e'
2021-08-04 16:21:14,521 - settings: INFO 最大产量调度模式
2021-08-04 16:21:14,542 - settings: INFO 最大产量:179.21176
2021-08-04 16:21:14,543 - settings: INFO 各变量取值:
2021-08-04 16:21:14,543 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:21:14,544 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:21:14,797 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:21:14,797 - settings: INFO {'e0118ce2-7644-4f6e-aadc-8e0c33b11241', 'f68909a0-e644-415f-a140-15c19f162b8f', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', '5221a7f5-0a90-482f-b2bd-c902110a792d', '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', '5f010e86-3398-4f88-a0e7-27d104cc8bbd', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', 'aae4642f-f74b-4514-971e-c800a4182152', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', 'fb1d5516-9a42-4f6e-84fe-9955723badce', '9b251c39-42e8-4071-9a1f-d36625555513'}
2021-08-04 16:21:14,870 - settings: INFO
2021-08-04 16:21:14,870 - settings: INFO 调度系统启动
2021-08-04 16:21:15,115 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:21:15,170 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:21:15,170 - settings: ERROR 0
2021-08-04 16:21:15,173 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:21:15,173 - settings: ERROR 0
2021-08-04 16:21:15,380 - settings: INFO 矿卡当前任务:
2021-08-04 16:21:15,380 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:21:15,381 - settings: ERROR 读取矿卡有效载重异常-矿卡型号信息缺失
2021-08-04 16:21:15,381 - settings: ERROR 'e0118ce2-7644-4f6e-aadc-8e0c33b11241'
2021-08-04 16:21:15,483 - settings: WARNING 0
2021-08-04 16:21:15,483 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,483 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,483 - settings: WARNING 1
2021-08-04 16:21:15,484 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,484 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,484 - settings: WARNING 2
2021-08-04 16:21:15,484 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,485 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,485 - settings: WARNING 3
2021-08-04 16:21:15,486 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,486 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,486 - settings: WARNING 4
2021-08-04 16:21:15,486 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,486 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,487 - settings: WARNING 5
2021-08-04 16:21:15,487 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,487 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,487 - settings: WARNING 6
2021-08-04 16:21:15,487 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,487 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,487 - settings: WARNING 7
2021-08-04 16:21:15,487 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,488 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,488 - settings: WARNING 8
2021-08-04 16:21:15,488 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,488 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,488 - settings: WARNING 9
2021-08-04 16:21:15,488 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,488 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,489 - settings: WARNING 10
2021-08-04 16:21:15,489 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,489 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,489 - settings: WARNING 11
2021-08-04 16:21:15,489 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:21:15,489 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:21:15,526 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:21:15,526 - settings: ERROR 0
2021-08-04 16:21:15,530 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:21:15,531 - settings: ERROR 0
2021-08-04 16:21:15,728 - settings: ERROR 矿卡KK005所在路段信息读取异常
2021-08-04 16:21:15,741 - settings: ERROR 矿卡KK005实时速度读取异常
2021-08-04 16:21:15,742 - settings: ERROR 'KK005'
2021-08-04 16:21:15,952 - settings: ERROR 路网信息计成本计算异常
2021-08-04 16:21:15,952 - settings: ERROR 'e5d0ac4e-c134-3ef1-901b-867980c8453e'
2021-08-04 16:21:16,044 - settings: INFO 最大产量调度模式
2021-08-04 16:21:16,060 - settings: INFO 最大产量:179.21176
2021-08-04 16:21:16,061 - settings: INFO 各变量取值:
2021-08-04 16:21:16,061 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:21:16,062 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:21:16,062 - settings: ERROR 矿卡预计抵达时间计算异常
2021-08-04 16:21:16,063 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:21:16,063 - settings: ERROR 挖机/卸载设备预计装载量计算异常
2021-08-04 16:21:16,063 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:21:16,063 - settings: ERROR 卸载设备预计装载量计算异常
2021-08-04 16:21:16,063 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:22:00,415 - settings: INFO 最大产量调度模式
2021-08-04 16:22:00,427 - settings: INFO 最大产量:179.21176
2021-08-04 16:22:00,427 - settings: INFO 各变量取值:
2021-08-04 16:22:00,427 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:22:00,428 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:22:00,488 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:22:00,488 - settings: INFO {'31c1c93a-b037-4ab6-88b6-eef6cd23804b', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', 'fb1d5516-9a42-4f6e-84fe-9955723badce', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', '9b251c39-42e8-4071-9a1f-d36625555513', 'f68909a0-e644-415f-a140-15c19f162b8f', '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', '5f010e86-3398-4f88-a0e7-27d104cc8bbd', '5221a7f5-0a90-482f-b2bd-c902110a792d', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', 'aae4642f-f74b-4514-971e-c800a4182152'}
2021-08-04 16:22:00,516 - settings: INFO
2021-08-04 16:22:00,516 - settings: INFO 调度系统启动
2021-08-04 16:22:01,538 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:22:01,606 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:22:01,606 - settings: ERROR 0
2021-08-04 16:22:01,619 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:22:01,619 - settings: ERROR 0
2021-08-04 16:22:01,788 - settings: INFO 矿卡当前任务:
2021-08-04 16:22:01,788 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:22:01,788 - settings: ERROR 读取矿卡有效载重异常-矿卡型号信息缺失
2021-08-04 16:22:01,788 - settings: ERROR '31c1c93a-b037-4ab6-88b6-eef6cd23804b'
2021-08-04 16:22:01,845 - settings: WARNING 0
2021-08-04 16:22:01,845 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,846 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,846 - settings: WARNING 1
2021-08-04 16:22:01,846 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,846 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,846 - settings: WARNING 2
2021-08-04 16:22:01,846 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,846 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,846 - settings: WARNING 3
2021-08-04 16:22:01,847 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,847 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,847 - settings: WARNING 4
2021-08-04 16:22:01,847 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,847 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,847 - settings: WARNING 5
2021-08-04 16:22:01,847 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,847 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,847 - settings: WARNING 6
2021-08-04 16:22:01,847 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,847 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,847 - settings: WARNING 7
2021-08-04 16:22:01,847 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,847 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,847 - settings: WARNING 8
2021-08-04 16:22:01,847 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,848 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,848 - settings: WARNING 9
2021-08-04 16:22:01,848 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,848 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,848 - settings: WARNING 10
2021-08-04 16:22:01,848 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,848 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,848 - settings: WARNING 11
2021-08-04 16:22:01,848 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:01,848 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:01,898 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:22:01,898 - settings: ERROR 0
2021-08-04 16:22:01,903 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:22:01,903 - settings: ERROR 0
2021-08-04 16:22:03,521 - settings: INFO 最大产量调度模式
2021-08-04 16:22:03,533 - settings: INFO 最大产量:179.21176
2021-08-04 16:22:03,534 - settings: INFO 各变量取值:
2021-08-04 16:22:03,534 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:22:03,534 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:22:03,534 - settings: ERROR 矿卡预计抵达时间计算异常
2021-08-04 16:22:03,535 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:22:03,535 - settings: ERROR 挖机/卸载设备预计装载量计算异常
2021-08-04 16:22:03,535 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:22:03,535 - settings: ERROR 卸载设备预计装载量计算异常
2021-08-04 16:22:03,535 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:22:42,636 - settings: INFO 最大产量调度模式
2021-08-04 16:22:42,647 - settings: INFO 最大产量:179.21176
2021-08-04 16:22:42,647 - settings: INFO 各变量取值:
2021-08-04 16:22:42,647 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:22:42,647 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:22:42,708 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:22:42,708 - settings: INFO {'35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', '5221a7f5-0a90-482f-b2bd-c902110a792d', 'f68909a0-e644-415f-a140-15c19f162b8f', '9b251c39-42e8-4071-9a1f-d36625555513', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', '5f010e86-3398-4f88-a0e7-27d104cc8bbd', 'aae4642f-f74b-4514-971e-c800a4182152', 'fb1d5516-9a42-4f6e-84fe-9955723badce', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8'}
2021-08-04 16:22:42,755 - settings: INFO
2021-08-04 16:22:42,755 - settings: INFO 调度系统启动
2021-08-04 16:22:42,935 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:22:42,998 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:22:42,998 - settings: ERROR 0
2021-08-04 16:22:43,007 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:22:43,007 - settings: ERROR 0
2021-08-04 16:22:43,171 - settings: INFO 矿卡当前任务:
2021-08-04 16:22:43,171 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:22:43,171 - settings: ERROR 读取矿卡有效载重异常-矿卡型号信息缺失
2021-08-04 16:22:43,172 - settings: ERROR '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19'
2021-08-04 16:22:43,297 - settings: WARNING 0
2021-08-04 16:22:43,297 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,297 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,298 - settings: WARNING 1
2021-08-04 16:22:43,298 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,298 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,298 - settings: WARNING 2
2021-08-04 16:22:43,299 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,299 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,299 - settings: WARNING 3
2021-08-04 16:22:43,299 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,299 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,299 - settings: WARNING 4
2021-08-04 16:22:43,299 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,299 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,299 - settings: WARNING 5
2021-08-04 16:22:43,300 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,300 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,300 - settings: WARNING 6
2021-08-04 16:22:43,300 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,300 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,300 - settings: WARNING 7
2021-08-04 16:22:43,300 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,300 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,300 - settings: WARNING 8
2021-08-04 16:22:43,300 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,300 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,300 - settings: WARNING 9
2021-08-04 16:22:43,300 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,300 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,300 - settings: WARNING 10
2021-08-04 16:22:43,301 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,301 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,301 - settings: WARNING 11
2021-08-04 16:22:43,301 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:22:43,301 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:22:43,333 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:22:43,333 - settings: ERROR 0
2021-08-04 16:22:43,337 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:22:43,337 - settings: ERROR 0
2021-08-04 16:22:45,110 - settings: INFO 最大产量调度模式
2021-08-04 16:22:45,123 - settings: INFO 最大产量:179.21176
2021-08-04 16:22:45,123 - settings: INFO 各变量取值:
2021-08-04 16:22:45,123 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:22:45,124 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:22:45,124 - settings: ERROR 矿卡预计抵达时间计算异常
2021-08-04 16:22:45,124 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:22:45,124 - settings: ERROR 挖机/卸载设备预计装载量计算异常
2021-08-04 16:22:45,124 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:22:45,124 - settings: ERROR 卸载设备预计装载量计算异常
2021-08-04 16:22:45,124 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:23:02,248 - settings: INFO 最大产量调度模式
2021-08-04 16:23:02,261 - settings: INFO 最大产量:179.21176
2021-08-04 16:23:02,261 - settings: INFO 各变量取值:
2021-08-04 16:23:02,261 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:23:02,261 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:23:02,335 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:23:02,336 - settings: INFO {'35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', '9b251c39-42e8-4071-9a1f-d36625555513', '5f010e86-3398-4f88-a0e7-27d104cc8bbd', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', 'aae4642f-f74b-4514-971e-c800a4182152', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', 'fb1d5516-9a42-4f6e-84fe-9955723badce', '5221a7f5-0a90-482f-b2bd-c902110a792d', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', 'f68909a0-e644-415f-a140-15c19f162b8f'}
2021-08-04 16:23:02,357 - settings: INFO
2021-08-04 16:23:02,357 - settings: INFO 调度系统启动
2021-08-04 16:23:02,524 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:23:03,212 - settings: INFO 矿卡当前任务:
2021-08-04 16:23:03,212 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:23:06,248 - settings: INFO 最大产量调度模式
2021-08-04 16:23:06,258 - settings: INFO 最大产量:179.21176
2021-08-04 16:23:06,258 - settings: INFO 各变量取值:
2021-08-04 16:23:06,258 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:23:06,259 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:23:06,259 - settings: INFO
2021-08-04 16:23:06,259 - settings: INFO 调度矿卡 35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19 KK006
2021-08-04 16:23:06,259 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,259 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,259 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,259 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,259 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,260 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,260 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,260 - settings: INFO
2021-08-04 16:23:06,260 - settings: INFO 调度矿卡 9b251c39-42e8-4071-9a1f-d36625555513 验证bug
2021-08-04 16:23:06,260 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,260 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,260 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,260 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,260 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,260 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,261 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,261 - settings: INFO
2021-08-04 16:23:06,261 - settings: INFO 调度矿卡 5f010e86-3398-4f88-a0e7-27d104cc8bbd KK008
2021-08-04 16:23:06,261 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,261 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,261 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,261 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,261 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,261 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,261 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,261 - settings: INFO
2021-08-04 16:23:06,261 - settings: INFO 调度矿卡 dd8f0405-1ade-4d23-8985-2a1e603c5c2a KK002
2021-08-04 16:23:06,261 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,262 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,262 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,262 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,262 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,262 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,262 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,262 - settings: INFO
2021-08-04 16:23:06,262 - settings: INFO 调度矿卡 aae4642f-f74b-4514-971e-c800a4182152 KK010
2021-08-04 16:23:06,262 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,262 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,262 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,262 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,263 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,263 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,263 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,263 - settings: INFO
2021-08-04 16:23:06,263 - settings: INFO 调度矿卡 e0118ce2-7644-4f6e-aadc-8e0c33b11241 KK003
2021-08-04 16:23:06,263 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,263 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,263 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,263 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,263 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,264 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,264 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,264 - settings: INFO
2021-08-04 16:23:06,264 - settings: INFO 调度矿卡 1b787c4a-210a-46ce-a32c-73cbc1cd5e39 KK007
2021-08-04 16:23:06,264 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,264 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,264 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,264 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,264 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,264 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,264 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,265 - settings: INFO
2021-08-04 16:23:06,265 - settings: INFO 调度矿卡 fb1d5516-9a42-4f6e-84fe-9955723badce KK001
2021-08-04 16:23:06,265 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,265 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,265 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,265 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,266 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,266 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,266 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,266 - settings: INFO
2021-08-04 16:23:06,267 - settings: INFO 调度矿卡 5221a7f5-0a90-482f-b2bd-c902110a792d NTE200-4(18#)
2021-08-04 16:23:06,267 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,267 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,267 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,267 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,267 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,267 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,267 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,267 - settings: INFO
2021-08-04 16:23:06,268 - settings: INFO 调度矿卡 fa028808-a3f0-47dd-9929-f23e2cac2bf8 KK005
2021-08-04 16:23:06,268 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,268 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,268 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,268 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,268 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,268 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,268 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,268 - settings: INFO
2021-08-04 16:23:06,268 - settings: INFO 调度矿卡 31c1c93a-b037-4ab6-88b6-eef6cd23804b XDE120-8
2021-08-04 16:23:06,268 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,268 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,269 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,269 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,269 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,269 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,269 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,269 - settings: INFO
2021-08-04 16:23:06,269 - settings: INFO 调度矿卡 f68909a0-e644-415f-a140-15c19f162b8f KK004
2021-08-04 16:23:06,269 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:23:06,269 - settings: INFO 矿卡行程:无
2021-08-04 16:23:06,269 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:23:06,269 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:23:06,270 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:23:06,270 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:23:06,270 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:23:06,483 - settings: INFO #####################################周期更新结束#####################################
2021-08-04 16:23:40,397 - settings: INFO 最大产量调度模式
2021-08-04 16:23:40,412 - settings: INFO 最大产量:179.21176
2021-08-04 16:23:40,412 - settings: INFO 各变量取值:
2021-08-04 16:23:40,412 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:23:40,412 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:23:40,502 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:23:40,502 - settings: INFO {'9b251c39-42e8-4071-9a1f-d36625555513', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', '5f010e86-3398-4f88-a0e7-27d104cc8bbd', '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', 'f68909a0-e644-415f-a140-15c19f162b8f', 'aae4642f-f74b-4514-971e-c800a4182152', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', '5221a7f5-0a90-482f-b2bd-c902110a792d', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', 'fb1d5516-9a42-4f6e-84fe-9955723badce'}
2021-08-04 16:23:40,559 - settings: INFO
2021-08-04 16:23:40,559 - settings: INFO 调度系统启动
2021-08-04 16:23:40,808 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:23:40,883 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:23:40,883 - settings: ERROR 0
2021-08-04 16:23:40,887 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:23:40,887 - settings: ERROR 0
2021-08-04 16:23:41,077 - settings: INFO 矿卡当前任务:
2021-08-04 16:23:41,077 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:23:41,077 - settings: ERROR 读取矿卡有效载重异常-矿卡型号信息缺失
2021-08-04 16:23:41,077 - settings: ERROR '9b251c39-42e8-4071-9a1f-d36625555513'
2021-08-04 16:23:41,116 - settings: WARNING 0
2021-08-04 16:23:41,116 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,116 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,116 - settings: WARNING 1
2021-08-04 16:23:41,117 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,117 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,117 - settings: WARNING 2
2021-08-04 16:23:41,117 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,117 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,117 - settings: WARNING 3
2021-08-04 16:23:41,117 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,117 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,117 - settings: WARNING 4
2021-08-04 16:23:41,117 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,117 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,117 - settings: WARNING 5
2021-08-04 16:23:41,117 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,117 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,117 - settings: WARNING 6
2021-08-04 16:23:41,118 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,118 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,118 - settings: WARNING 7
2021-08-04 16:23:41,118 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,118 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,118 - settings: WARNING 8
2021-08-04 16:23:41,118 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,118 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,118 - settings: WARNING 9
2021-08-04 16:23:41,118 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,118 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,118 - settings: WARNING 10
2021-08-04 16:23:41,118 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,118 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,118 - settings: WARNING 11
2021-08-04 16:23:41,119 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:23:41,119 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:23:41,142 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:23:41,142 - settings: ERROR 0
2021-08-04 16:23:41,148 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:23:41,148 - settings: ERROR 0
2021-08-04 16:23:42,769 - settings: INFO 最大产量调度模式
2021-08-04 16:23:42,782 - settings: INFO 最大产量:179.21176
2021-08-04 16:23:42,782 - settings: INFO 各变量取值:
2021-08-04 16:23:42,782 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:23:42,782 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:23:42,783 - settings: ERROR 矿卡预计抵达时间计算异常
2021-08-04 16:23:42,783 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:23:42,783 - settings: ERROR 挖机/卸载设备预计装载量计算异常
2021-08-04 16:23:42,783 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:23:42,783 - settings: ERROR 卸载设备预计装载量计算异常
2021-08-04 16:23:42,783 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:24:27,025 - settings: INFO 最大产量调度模式
2021-08-04 16:24:27,038 - settings: INFO 最大产量:179.21176
2021-08-04 16:24:27,038 - settings: INFO 各变量取值:
2021-08-04 16:24:27,039 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:24:27,039 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:24:27,150 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:24:27,150 - settings: INFO {'9b251c39-42e8-4071-9a1f-d36625555513', 'fb1d5516-9a42-4f6e-84fe-9955723badce', '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', 'aae4642f-f74b-4514-971e-c800a4182152', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', 'f68909a0-e644-415f-a140-15c19f162b8f', '5221a7f5-0a90-482f-b2bd-c902110a792d', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', '5f010e86-3398-4f88-a0e7-27d104cc8bbd'}
2021-08-04 16:24:27,189 - settings: INFO
2021-08-04 16:24:27,189 - settings: INFO 调度系统启动
2021-08-04 16:24:27,492 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:24:27,565 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:24:27,566 - settings: ERROR 0
2021-08-04 16:24:27,572 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:24:27,572 - settings: ERROR 0
2021-08-04 16:24:27,772 - settings: INFO 矿卡当前任务:
2021-08-04 16:24:27,772 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:24:27,772 - settings: ERROR 读取矿卡有效载重异常-矿卡型号信息缺失
2021-08-04 16:24:27,772 - settings: ERROR '9b251c39-42e8-4071-9a1f-d36625555513'
2021-08-04 16:24:27,848 - settings: WARNING 0
2021-08-04 16:24:27,848 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,848 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,848 - settings: WARNING 1
2021-08-04 16:24:27,849 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,849 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,849 - settings: WARNING 2
2021-08-04 16:24:27,849 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,849 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,849 - settings: WARNING 3
2021-08-04 16:24:27,849 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,849 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,849 - settings: WARNING 4
2021-08-04 16:24:27,850 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,850 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,850 - settings: WARNING 5
2021-08-04 16:24:27,850 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,850 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,850 - settings: WARNING 6
2021-08-04 16:24:27,850 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,850 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,850 - settings: WARNING 7
2021-08-04 16:24:27,850 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,850 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,850 - settings: WARNING 8
2021-08-04 16:24:27,850 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,850 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,850 - settings: WARNING 9
2021-08-04 16:24:27,850 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,851 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,851 - settings: WARNING 10
2021-08-04 16:24:27,851 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,851 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,851 - settings: WARNING 11
2021-08-04 16:24:27,851 - settings: ERROR 矿卡行程读取异常
2021-08-04 16:24:27,851 - settings: ERROR local variable 'task' referenced before assignment
2021-08-04 16:24:27,911 - settings: ERROR 设备路网信息异常异常
2021-08-04 16:24:27,912 - settings: ERROR 0
2021-08-04 16:24:27,920 - settings: ERROR 备停区设备路网信息异常
2021-08-04 16:24:27,920 - settings: ERROR 0
2021-08-04 16:24:31,348 - settings: INFO 最大产量调度模式
2021-08-04 16:24:31,360 - settings: INFO 最大产量:179.21176
2021-08-04 16:24:31,360 - settings: INFO 各变量取值:
2021-08-04 16:24:31,360 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:24:31,360 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:24:31,361 - settings: ERROR 矿卡预计抵达时间计算异常
2021-08-04 16:24:31,361 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:24:31,361 - settings: ERROR 挖机/卸载设备预计装载量计算异常
2021-08-04 16:24:31,361 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:24:31,361 - settings: ERROR 卸载设备预计装载量计算异常
2021-08-04 16:24:31,361 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:27:08,458 - settings: INFO 最大产量调度模式
2021-08-04 16:27:08,474 - settings: INFO 最大产量:179.21176
2021-08-04 16:27:08,474 - settings: INFO 各变量取值:
2021-08-04 16:27:08,475 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:27:08,475 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:27:08,616 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:27:08,616 - settings: INFO {'e0118ce2-7644-4f6e-aadc-8e0c33b11241', 'f68909a0-e644-415f-a140-15c19f162b8f', '5221a7f5-0a90-482f-b2bd-c902110a792d', '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', 'aae4642f-f74b-4514-971e-c800a4182152', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', 'fb1d5516-9a42-4f6e-84fe-9955723badce', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', '5f010e86-3398-4f88-a0e7-27d104cc8bbd', '9b251c39-42e8-4071-9a1f-d36625555513', '31c1c93a-b037-4ab6-88b6-eef6cd23804b'}
2021-08-04 16:27:08,801 - settings: INFO
2021-08-04 16:27:08,801 - settings: INFO 调度系统启动
2021-08-04 16:27:10,038 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:27:10,961 - settings: INFO 矿卡当前任务:
2021-08-04 16:27:10,961 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:27:16,906 - settings: INFO 最大产量调度模式
2021-08-04 16:27:16,917 - settings: INFO 最大产量:179.21176
2021-08-04 16:27:16,917 - settings: INFO 各变量取值:
2021-08-04 16:27:16,917 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:27:16,918 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:27:16,918 - settings: ERROR 矿卡预计抵达时间计算异常
2021-08-04 16:27:16,918 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:27:16,918 - settings: ERROR 挖机/卸载设备预计装载量计算异常
2021-08-04 16:27:16,918 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:27:16,918 - settings: ERROR 卸载设备预计装载量计算异常
2021-08-04 16:27:16,918 - settings: ERROR 'Dispatcher' object has no attribute 'truck_index_to_uuid_dict'
2021-08-04 16:28:11,354 - settings: INFO 最大产量调度模式
2021-08-04 16:28:11,366 - settings: INFO 最大产量:179.21176
2021-08-04 16:28:11,366 - settings: INFO 各变量取值:
2021-08-04 16:28:11,366 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:28:11,367 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:28:11,445 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:28:11,446 - settings: INFO {'9b251c39-42e8-4071-9a1f-d36625555513', 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19', 'aae4642f-f74b-4514-971e-c800a4182152', '5f010e86-3398-4f88-a0e7-27d104cc8bbd', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', 'f68909a0-e644-415f-a140-15c19f162b8f', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', 'fb1d5516-9a42-4f6e-84fe-9955723badce', '5221a7f5-0a90-482f-b2bd-c902110a792d'}
2021-08-04 16:28:11,552 - settings: INFO
2021-08-04 16:28:11,553 - settings: INFO 调度系统启动
2021-08-04 16:28:11,993 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:28:12,236 - settings: INFO 矿卡当前任务:
2021-08-04 16:28:12,236 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, '5f010e86-3398-4f88-a0e7-27d104cc8bbd': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:28:14,851 - settings: INFO 最大产量调度模式
2021-08-04 16:28:14,863 - settings: INFO 最大产量:179.21176
2021-08-04 16:28:14,863 - settings: INFO 各变量取值:
2021-08-04 16:28:14,864 - settings: INFO 重运车流:[[179.21176, 0.0]] 单位: 吨/时
2021-08-04 16:28:14,864 - settings: INFO 空运车流:[[179.21176], [0.0]] 单位: 吨/时
2021-08-04 16:28:14,864 - settings: INFO
2021-08-04 16:28:14,864 - settings: INFO 调度矿卡 9b251c39-42e8-4071-9a1f-d36625555513 验证bug
2021-08-04 16:28:14,864 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,864 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,864 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,865 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,865 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,865 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,865 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,865 - settings: INFO
2021-08-04 16:28:14,865 - settings: INFO 调度矿卡 dd8f0405-1ade-4d23-8985-2a1e603c5c2a KK002
2021-08-04 16:28:14,865 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,865 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,865 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,865 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,865 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,866 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,866 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,866 - settings: INFO
2021-08-04 16:28:14,866 - settings: INFO 调度矿卡 31c1c93a-b037-4ab6-88b6-eef6cd23804b XDE120-8
2021-08-04 16:28:14,866 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,866 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,866 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,866 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,866 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,866 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,866 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,866 - settings: INFO
2021-08-04 16:28:14,867 - settings: INFO 调度矿卡 35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19 KK006
2021-08-04 16:28:14,867 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,867 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,867 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,867 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,867 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,867 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,867 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,867 - settings: INFO
2021-08-04 16:28:14,867 - settings: INFO 调度矿卡 aae4642f-f74b-4514-971e-c800a4182152 KK010
2021-08-04 16:28:14,867 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,867 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,867 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,868 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,868 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,868 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,868 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,868 - settings: INFO
2021-08-04 16:28:14,868 - settings: INFO 调度矿卡 5f010e86-3398-4f88-a0e7-27d104cc8bbd KK008
2021-08-04 16:28:14,868 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,868 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,868 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,868 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,868 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,869 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,869 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,869 - settings: INFO
2021-08-04 16:28:14,869 - settings: INFO 调度矿卡 1b787c4a-210a-46ce-a32c-73cbc1cd5e39 KK007
2021-08-04 16:28:14,869 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,869 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,869 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,869 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,869 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,869 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,869 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,870 - settings: INFO
2021-08-04 16:28:14,870 - settings: INFO 调度矿卡 fa028808-a3f0-47dd-9929-f23e2cac2bf8 KK005
2021-08-04 16:28:14,870 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,870 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,870 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,870 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,870 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,870 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,870 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,870 - settings: INFO
2021-08-04 16:28:14,870 - settings: INFO 调度矿卡 f68909a0-e644-415f-a140-15c19f162b8f KK004
2021-08-04 16:28:14,870 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,870 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,871 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,871 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,871 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,871 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,871 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,876 - settings: INFO
2021-08-04 16:28:14,877 - settings: INFO 调度矿卡 e0118ce2-7644-4f6e-aadc-8e0c33b11241 KK003
2021-08-04 16:28:14,877 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,877 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,877 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,878 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,878 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,878 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,878 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,878 - settings: INFO
2021-08-04 16:28:14,878 - settings: INFO 调度矿卡 fb1d5516-9a42-4f6e-84fe-9955723badce KK001
2021-08-04 16:28:14,878 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,878 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,878 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,879 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,879 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,879 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,880 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:14,880 - settings: INFO
2021-08-04 16:28:14,880 - settings: INFO 调度矿卡 5221a7f5-0a90-482f-b2bd-c902110a792d NTE200-4(18#)
2021-08-04 16:28:14,880 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:28:14,880 - settings: INFO 矿卡行程:无
2021-08-04 16:28:14,880 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:28:14,880 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:28:14,880 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:28:14,880 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:28:14,880 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:28:15,127 - settings: INFO #####################################周期更新结束#####################################
2021-08-04 16:36:54,114 - settings: INFO 最大产量调度模式
2021-08-04 16:36:54,132 - settings: INFO 最大产量:164.27745
2021-08-04 16:36:54,132 - settings: INFO 各变量取值:
2021-08-04 16:36:54,132 - settings: INFO 重运车流:[[164.27745, 0.0]] 单位: 吨/时
2021-08-04 16:36:54,132 - settings: INFO 空运车流:[[164.27745], [0.0]] 单位: 吨/时
2021-08-04 16:36:54,216 - settings: INFO 可用于动态派车的矿卡:
2021-08-04 16:36:54,216 - settings: INFO {'dd8f0405-1ade-4d23-8985-2a1e603c5c2a', '31c1c93a-b037-4ab6-88b6-eef6cd23804b', 'e0118ce2-7644-4f6e-aadc-8e0c33b11241', 'f68909a0-e644-415f-a140-15c19f162b8f', '1b787c4a-210a-46ce-a32c-73cbc1cd5e39', 'fb1d5516-9a42-4f6e-84fe-9955723badce', 'aae4642f-f74b-4514-971e-c800a4182152', '9b251c39-42e8-4071-9a1f-d36625555513', 'fa028808-a3f0-47dd-9929-f23e2cac2bf8', '5221a7f5-0a90-482f-b2bd-c902110a792d', '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19'}
2021-08-04 16:36:54,269 - settings: INFO
2021-08-04 16:36:54,269 - settings: INFO 调度系统启动
2021-08-04 16:36:54,555 - settings: INFO #####################################周期更新开始#####################################
2021-08-04 16:36:54,985 - settings: INFO 矿卡当前任务:
2021-08-04 16:36:54,985 - settings: INFO {'fa028808-a3f0-47dd-9929-f23e2cac2bf8': -2, '35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19': -2, '9b251c39-42e8-4071-9a1f-d36625555513': -2, '31c1c93a-b037-4ab6-88b6-eef6cd23804b': -2, 'fb1d5516-9a42-4f6e-84fe-9955723badce': -2, 'e0118ce2-7644-4f6e-aadc-8e0c33b11241': -2, '1b787c4a-210a-46ce-a32c-73cbc1cd5e39': -2, 'aae4642f-f74b-4514-971e-c800a4182152': -2, 'f68909a0-e644-415f-a140-15c19f162b8f': -2, '5221a7f5-0a90-482f-b2bd-c902110a792d': -2, 'dd8f0405-1ade-4d23-8985-2a1e603c5c2a': -2}
2021-08-04 16:36:57,193 - settings: INFO 最大产量调度模式
2021-08-04 16:36:57,205 - settings: INFO 最大产量:164.27745
2021-08-04 16:36:57,206 - settings: INFO 各变量取值:
2021-08-04 16:36:57,206 - settings: INFO 重运车流:[[164.27745, 0.0]] 单位: 吨/时
2021-08-04 16:36:57,206 - settings: INFO 空运车流:[[164.27745], [0.0]] 单位: 吨/时
2021-08-04 16:36:57,206 - settings: INFO
2021-08-04 16:36:57,206 - settings: INFO 调度矿卡 dd8f0405-1ade-4d23-8985-2a1e603c5c2a KK002
2021-08-04 16:36:57,206 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,207 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,207 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,207 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,207 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,207 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,207 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,207 - settings: INFO
2021-08-04 16:36:57,207 - settings: INFO 调度矿卡 31c1c93a-b037-4ab6-88b6-eef6cd23804b XDE120-8
2021-08-04 16:36:57,207 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,207 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,207 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,208 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,208 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,208 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,208 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,208 - settings: INFO
2021-08-04 16:36:57,208 - settings: INFO 调度矿卡 e0118ce2-7644-4f6e-aadc-8e0c33b11241 KK003
2021-08-04 16:36:57,208 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,208 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,208 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,208 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,208 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,209 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,209 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,209 - settings: INFO
2021-08-04 16:36:57,209 - settings: INFO 调度矿卡 f68909a0-e644-415f-a140-15c19f162b8f KK004
2021-08-04 16:36:57,209 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,209 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,209 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,209 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,209 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,209 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,209 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,209 - settings: INFO
2021-08-04 16:36:57,209 - settings: INFO 调度矿卡 1b787c4a-210a-46ce-a32c-73cbc1cd5e39 KK007
2021-08-04 16:36:57,210 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,210 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,210 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,210 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,210 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,210 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,210 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,210 - settings: INFO
2021-08-04 16:36:57,210 - settings: INFO 调度矿卡 fb1d5516-9a42-4f6e-84fe-9955723badce KK001
2021-08-04 16:36:57,210 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,210 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,210 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,211 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,211 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,211 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,211 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,211 - settings: INFO
2021-08-04 16:36:57,211 - settings: INFO 调度矿卡 aae4642f-f74b-4514-971e-c800a4182152 KK010
2021-08-04 16:36:57,211 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,211 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,211 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,211 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,211 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,212 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,212 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,212 - settings: INFO
2021-08-04 16:36:57,212 - settings: INFO 调度矿卡 9b251c39-42e8-4071-9a1f-d36625555513 验证bug
2021-08-04 16:36:57,212 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,212 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,212 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,212 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,212 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,212 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,212 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,212 - settings: INFO
2021-08-04 16:36:57,212 - settings: INFO 调度矿卡 fa028808-a3f0-47dd-9929-f23e2cac2bf8 KK005
2021-08-04 16:36:57,213 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,213 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,213 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,213 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,213 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,213 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,213 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,214 - settings: INFO
2021-08-04 16:36:57,214 - settings: INFO 调度矿卡 5221a7f5-0a90-482f-b2bd-c902110a792d NTE200-4(18#)
2021-08-04 16:36:57,214 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,214 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,214 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,215 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,215 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,215 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,216 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,216 - settings: INFO
2021-08-04 16:36:57,216 - settings: INFO 调度矿卡 35bd9fcc-e57e-4e6d-854d-b6f1f16f6b19 KK006
2021-08-04 16:36:57,216 - settings: INFO 矿卡状态:矿卡启动或故障恢复
2021-08-04 16:36:57,216 - settings: INFO 矿卡行程:无
2021-08-04 16:36:57,216 - settings: INFO 涉及挖机:['18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e']
2021-08-04 16:36:57,216 - settings: INFO 挖机饱和度:[1.]
2021-08-04 16:36:57,216 - settings: INFO 行程时间:[2.30666667]
2021-08-04 16:36:57,216 - settings: INFO 行驶时间:[2.30666667]
2021-08-04 16:36:57,216 - settings: INFO 目的地:18a8cfc1-0ff6-42ac-bb2a-2d770e42d39e
2021-08-04 16:36:57,551 - settings: INFO #####################################周期更新结束#####################################
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2021/8/4 15:50
# @Author : Opfer
# @Site :
# @File : para_config.py
# @Software: PyCharm
from static_data_process import *
from settings import *
import numpy as np
# 全局参数设定
# 空载任务集合
empty_task_set = [0, 1, 5]
# 重载任务集合
heavy_task_set = [2, 3, 4]
# 空载矿卡速度,单位(km/h)
global empty_speed
empty_speed = 25
# 重载矿卡速度,单位(km/h)
global heavy_speed
heavy_speed = 22
# 卸载设备目标卸载量
dump_target_mass = 5000
# 挖机目标装载量
excavator_target_mass = 5000
# 任务集合
task_set = [-2, 0, 1, 2, 3, 4, 5]
# Big integer
M = 100000000
# 装载区、卸载区、备停区在调度算法运行器件默认不发生改变,提前计算部分参量
# (uuid,index(id)映射关系, 装载区数量, 卸载区数量, 备停区数量, 以及初次统计动态调度矿卡)
load_area_uuid_to_index_dict, unload_area_uuid_to_index_dict, \
load_area_index_to_uuid_dict, unload_area_index_to_uuid_dict = build_work_area_uuid_index_map()
load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(unload_area_uuid_to_index_dict)
park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map()
park_num = len(park_uuid_to_index_dict)
truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
# 矿卡集合
truck_set = set(update_total_truck())
# 固定派车矿卡集合
fixed_truck_set = set(update_fixdisp_truck())
# 动态派车矿卡集合
dynamic_truck_set = truck_set.difference(fixed_truck_set)
dynamic_truck_num = len(dynamic_truck_set)
logger.info("可用于动态派车的矿卡:")
logger.info(dynamic_truck_set)
# 用于动态调度的挖机及卸载设备
dynamic_excavator_set = set(update_autodisp_excavator())
dynamic_excavator_num = len(dynamic_excavator_set)
dynamic_dump_set = set(update_autodisp_dump())
dynamic_dump_num = len(dynamic_dump_set)
# 设备映射类, 存储除工作区以外的映射关系
# 其余设备类继承该类
class DeviceMap:
def __init__(self):
self.excavator_uuid_to_index_dict = {}
self.dump_uuid_to_index_dict = {}
self.excavator_index_to_uuid_dict = {}
self.dump_index_to_uuid_dict = {}
self.dump_uuid_to_unload_area_uuid_dict = {}
self.excavator_uuid_to_load_area_uuid_dict = {}
self.excavator_index_to_load_area_index_dict = {}
self.dump_index_to_unload_area_index_dict = {}
self.truck_uuid_to_index_dict = {}
self.truck_index_to_uuid_dict = {}
def get_excavator_uuid_to_index_dict(self):
return self.excavator_uuid_to_index_dict
def get_dump_uuid_to_index_dict(self):
return self.dump_uuid_to_index_dict
def get_excavator_index_to_uuid_dict(self):
return self.excavator_index_to_uuid_dict
def get_dump_index_to_uuid_dict(self):
return self.dump_index_to_uuid_dict
def get_dump_uuid_to_unload_area_uuid_dict(self):
return self.dump_uuid_to_unload_area_uuid_dict
def get_excavator_uuid_to_load_area_uuid_dict(self):
return self.excavator_uuid_to_load_area_uuid_dict
def get_excavator_index_to_load_area_index_dict(self):
return self.excavator_index_to_load_area_index_dict
def get_dump_index_to_unload_area_index_dict(self):
return self.dump_index_to_unload_area_index_dict
def get_truck_uuid_to_index_dict(self):
return self.truck_uuid_to_index_dict
def get_truck_index_to_uuid_dict(self):
return self.truck_index_to_uuid_dict
def period_map_para_update(self):
device_map_dict = update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_dict)
self.excavator_uuid_to_index_dict = device_map_dict['excavator_uuid_to_index_dict']
self.dump_uuid_to_index_dict = device_map_dict['dump_uuid_to_index_dict']
self.excavator_index_to_uuid_dict = device_map_dict['excavator_index_to_uuid_dict']
self.dump_index_to_uuid_dict = device_map_dict['dump_index_to_uuid_dict']
self.dump_uuid_to_unload_area_uuid_dict = device_map_dict['dump_uuid_to_unload_area_uuid_dict']
self.excavator_uuid_to_load_area_uuid_dict = device_map_dict['excavator_uuid_to_load_area_uuid_dict']
self.excavator_index_to_load_area_index_dict = device_map_dict['excavator_index_to_load_area_index_dict']
self.dump_index_to_unload_area_index_dict = device_map_dict['dump_index_to_unload_area_index_dict']
truck_map_dict = update_truck_uuid_index_map(dynamic_truck_set)
self.truck_uuid_to_index_dict = truck_map_dict['truck_uuid_to_index_dict']
self.truck_index_to_uuid_dict = truck_map_dict['truck_index_to_uuid_dict']
def period_map_para_load(self):
# 装载关系映射
self.excavator_uuid_to_index_dict = device_map.excavator_uuid_to_index_dict
self.dump_uuid_to_index_dict = device_map.dump_uuid_to_index_dict
self.excavator_index_to_uuid_dict = device_map.excavator_index_to_uuid_dict
self.dump_index_to_uuid_dict = device_map.dump_index_to_uuid_dict
self.dump_uuid_to_unload_area_uuid_dict = device_map.dump_uuid_to_unload_area_uuid_dict
self.excavator_uuid_to_load_area_uuid_dict = device_map.excavator_uuid_to_load_area_uuid_dict
self.excavator_index_to_load_area_index_dict = device_map.excavator_index_to_load_area_index_dict
self.dump_index_to_unload_area_index_dict = device_map.dump_index_to_unload_area_index_dict
self.truck_uuid_to_index_dict = device_map.truck_uuid_to_index_dict
self.truck_index_to_uuid_dict = device_map.truck_index_to_uuid_dict
# 路网信息类
class WalkManage(DeviceMap):
def __init__(self):
# # 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备
# 路网真实距离
self.walk_time_to_excavator = np.full((dynamic_dump_num, dynamic_excavator_num), M)
self.walk_time_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M)
self.walk_time_park_to_excavator = np.full((park_num, dynamic_excavator_num), M)
self.walk_time_park_to_load_area = np.full((park_num, load_area_num), M)
self.walk_time_to_load_area = np.full((unload_area_num, load_area_num), M)
self.walk_time_to_unload_area = np.full((unload_area_num, load_area_num), M)
# 路网行驶时间
self.distance_to_excavator = np.full((dynamic_dump_num, dynamic_excavator_num), M)
self.distance_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M)
self.distance_park_to_excavator = np.full((park_num, dynamic_excavator_num), M)
self.distance_park_to_load_area = np.full((park_num, load_area_num), M)
self.distance_to_load_area = np.full((unload_area_num, load_area_num), M)
self.distance_to_unload_area = np.full((unload_area_num, load_area_num), M)
def get_walk_time_to_load_area(self):
return self.walk_time_to_load_area
def get_walk_time_to_unload_area(self):
return self.walk_time_to_unload_area
def get_walk_time_to_excavator(self):
return self.walk_time_to_excavator
def get_walk_time_to_dump(self):
return self.walk_time_to_dump
def get_walk_time_park_to_load_area(self):
return self.walk_time_park_to_load_area
def get_walk_time_park_to_excavator(self):
return self.walk_time_park_to_excavator
def get_distance_to_load_area(self):
return self.distance_to_load_area
def get_distance_to_unload_area(self):
return self.distance_to_unload_area
def get_distance_to_excavator(self):
return self.distance_to_excavator
def get_distance_to_dump(self):
return self.distance_to_dump
def get_distance_park_to_load_area(self):
return self.distance_park_to_load_area
def get_distance_park_to_excavator(self):
return self.distance_park_to_excavator
def period_walk_para_update(self):
self.period_map_para_load()
# 计算路网距离及行走时间
try:
# 处理距离
for item in session_postgre.query(WalkTime).all():
load_area = str(item.load_area_id)
unload_area = str(item.unload_area_id)
load_area_index = load_area_uuid_to_index_dict[load_area]
unload_area_index = unload_area_uuid_to_index_dict[unload_area]
self.distance_to_load_area[unload_area_index][load_area_index] = float(item.to_load_distance)
self.walk_time_to_load_area[unload_area_index][load_area_index] = float(
60 / 1000 * item.to_load_distance / empty_speed)
self.distance_to_unload_area[unload_area_index][load_area_index] = float(item.to_unload_distance)
self.walk_time_to_unload_area[unload_area_index][load_area_index] = float(
60 / 1000 * item.to_unload_distance / heavy_speed)
except Exception as es:
logger.error("路网信息异常")
logger.error(es)
# 计算设备路网距离及行走时间
try:
for i in range(dynamic_dump_num):
for j in range(dynamic_excavator_num):
self.distance_to_excavator[i][j] = self.distance_to_load_area[self.dump_index_to_unload_area_index_dict[i]] \
[self.excavator_index_to_load_area_index_dict[j]]
self.walk_time_to_excavator[i][j] = self.walk_time_to_load_area[self.dump_index_to_unload_area_index_dict[i]] \
[self.excavator_index_to_load_area_index_dict[j]]
self.distance_to_dump[i][j] = self.distance_to_unload_area[self.dump_index_to_unload_area_index_dict[i]] \
[self.excavator_index_to_load_area_index_dict[j]]
self.walk_time_to_dump[i][j] = self.walk_time_to_unload_area[self.dump_index_to_unload_area_index_dict[i]] \
[self.excavator_index_to_load_area_index_dict[j]]
except Exception as es:
logger.error("设备路网信息异常异常")
logger.error(es)
# try:
for item in session_postgre.query(WalkTimePark).all():
load_area = str(item.load_area_id)
park_area = str(item.park_area_id)
load_area_index = load_area_uuid_to_index_dict[load_area]
park_index = park_uuid_to_index_dict[park_area]
self.distance_park_to_load_area[park_index][load_area_index] = float(item.park_load_distance)
self.walk_time_park_to_load_area[park_index][load_area_index] = float(
60 / 1000 * item.park_load_distance / empty_speed)
# except Exception as es:
# logger.error("备停区路网信息异常")
# logger.error(es)
# try:
for i in range(park_num):
for j in range(dynamic_excavator_num):
self.distance_park_to_excavator[i][j] = self.distance_park_to_load_area[i][
self.excavator_index_to_load_area_index_dict[j]]
self.walk_time_park_to_excavator[i][j] = self.walk_time_park_to_load_area[i][
self.excavator_index_to_load_area_index_dict[j]]
# except Exception as es:
# logger.error("备停区设备路网信息异常")
# logger.error(es)
def period_walk_para_load(self):
# 装载路网信息
self.distance_to_load_area = walk_manage.distance_to_load_area
self.distance_to_unload_area = walk_manage.distance_to_unload_area
self.distance_park_to_load_area = walk_manage.distance_park_to_load_area
self.distance_to_excavator = walk_manage.distance_to_excavator
self.distance_to_dump = walk_manage.distance_to_dump
self.distance_park_to_excavator = walk_manage.distance_park_to_excavator
self.walk_time_to_excavator = walk_manage.walk_time_to_excavator
self.walk_time_to_dump = walk_manage.walk_time_to_dump
self.walk_time_park_to_excavator = walk_manage.walk_time_park_to_excavator
self.walk_time_to_load_area = walk_manage.walk_time_to_load_area
self.walk_time_to_unload_area = walk_manage.walk_time_to_unload_area
self.walk_time_park_to_load_area = walk_manage.walk_time_park_to_load_area
device_map = DeviceMap()
walk_manage = WalkManage()
device_map.period_map_para_update()
walk_manage.period_walk_para_update()
def period_para_update():
global load_area_uuid_to_index_dict, load_area_index_to_uuid_dict
global unload_area_uuid_to_index_dict, unload_area_index_to_uuid_dict
global load_area_num, unload_area_num, park_num
global park_uuid_to_index_dict, park_index_to_uuid_dict
global truck_uuid_to_name_dict, truck_name_to_uuid_dict
global dynamic_truck_num, dynamic_excavator_num, dynamic_dump_num
# 装载区、卸载区、备停区在调度算法运行器件默认不发生改变,提前计算部分参量
# (uuid,index(id)映射关系, 装载区数量, 卸载区数量, 备停区数量, 以及初次统计动态调度矿卡)
load_area_uuid_to_index_dict, unload_area_uuid_to_index_dict, \
load_area_index_to_uuid_dict, unload_area_index_to_uuid_dict = build_work_area_uuid_index_map()
load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(unload_area_uuid_to_index_dict)
park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map()
park_num = len(park_uuid_to_index_dict)
truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
# 矿卡集合
truck_set = set(update_total_truck())
# 固定派车矿卡集合
fixed_truck_set = set(update_fixdisp_truck())
# 动态派车矿卡集合
dynamic_truck_set = truck_set.difference(fixed_truck_set)
dynamic_truck_num = len(dynamic_truck_set)
logger.info("可用于动态派车的矿卡:")
logger.info(dynamic_truck_set)
# 用于动态调度的挖机及卸载设备
dynamic_excavator_set = set(update_autodisp_excavator())
dynamic_excavator_num = len(dynamic_excavator_set)
dynamic_dump_set = set(update_autodisp_dump())
dynamic_dump_num = len(dynamic_dump_set)
device_map.period_map_para_update()
walk_manage.period_walk_para_update()
...@@ -10,20 +10,12 @@ import numpy ...@@ -10,20 +10,12 @@ import numpy
from settings import * from settings import *
from static_data_process import * from static_data_process import *
from settings import * from settings import *
from para_config import *
load_area_uuid_to_index_dict, unload_area_uuid_to_index_dict, \
load_area_index_to_uuid_dict, unload_area_index_to_uuid_dict = build_work_area_uuid_index_map()
park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map()
load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(unload_area_uuid_to_index_dict)
truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
M = 1000000 M = 1000000
class PathPlanner: class PathPlanner(WalkManage):
def __init__(self): def __init__(self):
# 路线行驶成本 # 路线行驶成本
self.rout_cost = np.array((unload_area_num, load_area_num)) self.rout_cost = np.array((unload_area_num, load_area_num))
...@@ -37,11 +29,11 @@ class PathPlanner: ...@@ -37,11 +29,11 @@ class PathPlanner:
self.num_of_unload_area = len(set(update_unload_area())) self.num_of_unload_area = len(set(update_unload_area()))
# 备停区数量 # 备停区数量
self.num_of_park_area = len(set(update_park_area())) self.num_of_park_area = len(set(update_park_area()))
# 路网信息 # 路网行驶成本信息信息
self.walk_time_to_load_area = np.full((self.num_of_unload_area, self.num_of_load_area), M) self.cost_to_load_area = np.full((self.num_of_unload_area, self.num_of_load_area), M)
self.walk_time_to_unload_area = np.full((self.num_of_unload_area, self.num_of_load_area), M) self.cost_to_unload_area = np.full((self.num_of_unload_area, self.num_of_load_area), M)
# 路网信息(备停区) # 路网信息(备停区)
self.walk_time_park = np.full((self.num_of_park_area, self.num_of_load_area), M) self.cost_park_to_load_area = np.full((self.num_of_park_area, self.num_of_load_area), M)
# 路段类 # 路段类
self.lane = LaneInfo() self.lane = LaneInfo()
self.lane.lane_speed_generate() self.lane.lane_speed_generate()
...@@ -49,16 +41,16 @@ class PathPlanner: ...@@ -49,16 +41,16 @@ class PathPlanner:
def path_cost_generate(self, load_area_id, unload_area_id, is_park): def path_cost_generate(self, load_area_id, unload_area_id, is_park):
# 卸载道路阻塞成本初始化 # 卸载道路阻塞成本初始化
to_unload_blockage_cost = 0 cost_to_unload_blockage = 0
# 装载道路阻塞成本初始化 # 装载道路阻塞成本初始化
to_load_blockage_cost = 0 cost_to_load_blockage = 0
# 卸载道路总成本初始化 # 卸载道路总成本初始化
to_unload_cost = 0 to_unload_cost = 0
# 装载道路总成本初始化 # 装载道路总成本初始化
to_load_cost = 0 to_load_cost = 0
# 阻塞成本权重 # 阻塞成本权重
alpha = 500 alpha = 10000
# 距离成本权重 # 距离成本权重
beta = 1 beta = 1
...@@ -72,27 +64,27 @@ class PathPlanner: ...@@ -72,27 +64,27 @@ class PathPlanner:
# 读取道路路段信息 # 读取道路路段信息
for lane_id in path.park_load_lanes: for lane_id in path.park_load_lanes:
# 各路段阻塞成本累加 # 各路段阻塞成本累加
to_load_blockage_cost = to_load_blockage_cost + beta * self.lane_cost_generate(lane_id) cost_to_load_blockage = cost_to_load_blockage + beta * self.lane_cost_generate(lane_id)
# 道路总成本=道路距离成本+道路阻塞成本 # 道路总成本=道路距离成本+道路阻塞成本
to_load_cost = alpha * to_load_blockage_cost + beta * path.park_load_distance to_load_cost = alpha * cost_to_load_blockage + beta * path.park_load_distance
else: else:
path = session_postgre.query(WalkTime).filter_by(load_area_id=load_area_id, path = session_postgre.query(WalkTime).filter_by(load_area_id=load_area_id,
unload_area_id=unload_area_id).first() unload_area_id=unload_area_id).first()
for lane_id in path.to_unload_lanes: for lane_id in path.to_unload_lanes:
to_unload_blockage_cost = to_unload_blockage_cost + self.lane_cost_generate(lane_id) cost_to_unload_blockage = cost_to_unload_blockage + self.lane_cost_generate(lane_id)
for lane_id in path.to_load_lanes: for lane_id in path.to_load_lanes:
to_load_blockage_cost = to_load_blockage_cost + self.lane_cost_generate(lane_id) cost_to_load_blockage = cost_to_load_blockage + self.lane_cost_generate(lane_id)
to_unload_cost = alpha * to_unload_blockage_cost + beta * path.to_unload_distance to_unload_cost = alpha * cost_to_unload_blockage + beta * path.to_unload_distance
to_load_cost = alpha * to_load_blockage_cost + beta * path.to_load_distance to_load_cost = alpha * cost_to_load_blockage + beta * path.to_load_distance
except Exception as es: except Exception as es:
logger.error(f'道路{load_area_id-unload_area_id}行驶成本计算异常') logger.error(f'道路{load_area_id-unload_area_id}行驶成本计算异常')
logger.error(es) logger.error(es)
return to_unload_cost, to_load_cost return to_load_cost, to_unload_cost
def lane_cost_generate(self, lane_id): def lane_cost_generate(self, lane_id):
try: try:
...@@ -119,39 +111,49 @@ class PathPlanner: ...@@ -119,39 +111,49 @@ class PathPlanner:
def walk_cost(self): def walk_cost(self):
try: self.period_walk_para_load()
# 读取路网距离信息 self.period_map_para_load()
walk_time_load_distance = np.full((self.num_of_unload_area, self.num_of_load_area), M)
walk_time_unload_distance = np.full((self.num_of_unload_area, self.num_of_load_area), M) try:
# 读取路网成本 # 读取路网成本
for walk_time in session_postgre.query(WalkTime).all(): for walk_time in session_postgre.query(WalkTime).all():
unload_area_index = unload_area_uuid_to_index_dict[str(walk_time.unload_area_id)] unload_area_index = unload_area_uuid_to_index_dict[str(walk_time.unload_area_id)]
load_area_index = load_area_uuid_to_index_dict[str(walk_time.load_area_id)] load_area_index = load_area_uuid_to_index_dict[str(walk_time.load_area_id)]
self.walk_time_to_load_area[unload_area_index][load_area_index], \ self.cost_to_load_area[unload_area_index][load_area_index], \
self.walk_time_to_unload_area[unload_area_index][load_area_index] = \ self.cost_to_unload_area[unload_area_index][load_area_index] = \
self.path_cost_generate(walk_time.load_area_id, walk_time.unload_area_id, False) self.path_cost_generate(walk_time.load_area_id, walk_time.unload_area_id, False)
walk_time_unload_distance[unload_area_index][load_area_index] = walk_time.to_load_distance
walk_time_load_distance[unload_area_index][load_area_index] = walk_time.to_unload_distance
# 读取备停区路网成本 # 读取备停区路网成本
for walk_time_park in session_postgre.query(WalkTimePark).all(): for walk_time_park in session_postgre.query(WalkTimePark).all():
park_area_index = park_uuid_to_index_dict[str(walk_time_park.park_area_id)] park_area_index = park_uuid_to_index_dict[str(walk_time_park.park_area_id)]
load_area_index = load_area_uuid_to_index_dict[str(walk_time_park.load_area_id)] load_area_index = load_area_uuid_to_index_dict[str(walk_time_park.load_area_id)]
_, self.walk_time_park[park_area_index][load_area_index] = \ _, self.cost_park_to_load_area[park_area_index][load_area_index] = \
self.path_cost_generate(walk_time_park.load_area_id, walk_time_park.park_area_id, True) self.path_cost_generate(walk_time_park.load_area_id, walk_time_park.park_area_id, True)
except Exception as es: except Exception as es:
logger.error('路网信息计成本计算异常') logger.error('路网信息计成本计算异常')
logger.error(es) logger.error(es)
print("真实路网距离:装载-卸载") cost_to_excavator = np.zeros_like(self.distance_to_excavator)
print(self.walk_time_to_load_area) cost_to_dump = np.zeros_like(self.distance_to_dump)
print(self.walk_time_to_unload_area)
print("实际路网距离(阻塞):装载-卸载") for i in range(dynamic_dump_num):
print(walk_time_load_distance) for j in range(dynamic_excavator_num):
print(walk_time_unload_distance) cost_to_excavator[i][j] = self.cost_to_load_area[self.dump_index_to_unload_area_index_dict[i]][self.excavator_index_to_load_area_index_dict[j]]
cost_to_dump[i][j] = self.cost_to_unload_area[self.dump_index_to_unload_area_index_dict[i]][self.excavator_index_to_load_area_index_dict[j]]
logger.info("真实路网距离-驶往挖机:")
logger.info(self.distance_to_excavator)
logger.info("真实路网距离-驶往卸点:")
logger.info(self.distance_to_dump)
logger.info("阻塞路网距离-驶往挖机:")
logger.info(cost_to_excavator)
logger.info("阻塞路网距离-驶往卸点:")
logger.info(cost_to_dump)
class LaneInfo: class LaneInfo:
...@@ -185,7 +187,8 @@ class LaneInfo: ...@@ -185,7 +187,8 @@ class LaneInfo:
item = item.decode(encoding='utf-8') item = item.decode(encoding='utf-8')
json_value = json.loads(redis2.get(item)) json_value = json.loads(redis2.get(item))
device_type = json_value.get('type') device_type = json_value.get('type')
if device_type == 1: is_online = json_value.get('isOnline')
if device_type == 1 and is_online:
truck_locate = json_value.get('laneId') truck_locate = json_value.get('laneId')
truck_locate_dict[truck_name_to_uuid_dict[item]] = truck_locate truck_locate_dict[truck_name_to_uuid_dict[item]] = truck_locate
except Exception as es: except Exception as es:
...@@ -198,14 +201,20 @@ class LaneInfo: ...@@ -198,14 +201,20 @@ class LaneInfo:
# truck -> lane # truck -> lane
truck_locate_dict = self.update_truck_loacate() truck_locate_dict = self.update_truck_loacate()
print("truck -> lane") # print("truck -> lane")
print(truck_locate_dict) # print(truck_locate_dict)
logger.info("矿卡位于路段:")
logger.info(truck_locate_dict)
# truck -> speed # truck -> speed
truck_speed_dict = self.update_truck_speed() truck_speed_dict = self.update_truck_speed()
print("truck -> speed") # print("truck -> speed")
print(truck_speed_dict) # print(truck_speed_dict)
logger.info("矿卡当前速度:")
logger.info(truck_speed_dict)
try: try:
# lane_set, 用到的路段集合 # lane_set, 用到的路段集合
...@@ -221,6 +230,7 @@ class LaneInfo: ...@@ -221,6 +230,7 @@ class LaneInfo:
lane_set = set(lane_set) lane_set = set(lane_set)
except Exception as es: except Exception as es:
logger.error('所用路网路段集合读取异常') logger.error('所用路网路段集合读取异常')
logger.info(es)
# lane -> speed, 各路段平均行驶速度 # lane -> speed, 各路段平均行驶速度
self.lane_speed_dict = {} self.lane_speed_dict = {}
...@@ -250,8 +260,11 @@ class LaneInfo: ...@@ -250,8 +260,11 @@ class LaneInfo:
tmp_lane_set.append(lane_id) tmp_lane_set.append(lane_id)
# 存在矿卡的路段 # 存在矿卡的路段
print("存在矿卡的路段:") # print("存在矿卡的路段:")
print(tmp_lane_set) # print(tmp_lane_set)
logger.info("存在矿卡的路段:")
logger.info(tmp_lane_set)
# 对不存在的矿卡路段,实时速度设置为最高 # 对不存在的矿卡路段,实时速度设置为最高
for lane_id in lane_set: for lane_id in lane_set:
...@@ -268,3 +281,7 @@ class LaneInfo: ...@@ -268,3 +281,7 @@ class LaneInfo:
logger.error(es) logger.error(es)
return self.lane_speed_dict return self.lane_speed_dict
# path_planner = PathPlanner()
#
# path_planner.walk_cost()
...@@ -12,129 +12,43 @@ ...@@ -12,129 +12,43 @@
from traffic_flow.traffic_flow_planner import * from traffic_flow.traffic_flow_planner import *
from static_data_process import * from static_data_process import *
from para_config import *
# 全局参数设定 from settings import *
# 空载任务集合
empty_task_set = [0, 1, 5]
# 重载任务集合
heavy_task_set = [2, 3, 4]
# 空载矿卡速度,单位(km/h)
empty_speed = 25
# 重载矿卡速度,单位(km/h)
heavy_speed = 22
# 卸载设备目标卸载量
dump_target_mass = 5000
# 挖机目标装载量
excavator_target_mass = 5000
# 任务集合
task_set = [-2, 0, 1, 2, 3, 4, 5]
# Big integer
M = 100000000
# 装载区、卸载区、备停区在调度算法运行器件默认不发生改变,提前计算部分参量
# (uuid,index(id)映射关系, 装载区数量, 卸载区数量, 备停区数量, 以及初次统计动态调度矿卡)
load_area_uuid_to_index_dict, unload_area_uuid_to_index_dict, \
load_area_index_to_uuid_dict, unload_area_index_to_uuid_dict = build_work_area_uuid_index_map()
load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(unload_area_uuid_to_index_dict)
park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map()
park_num = len(park_uuid_to_index_dict)
truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
# 矿卡集合
truck_set = set(update_total_truck())
# 固定派车矿卡集合
fixed_truck_set = set(update_fixdisp_truck())
# 动态派车矿卡集合
dynamic_truck_set = truck_set.difference(fixed_truck_set)
logger.info("可用于动态派车的矿卡:")
logger.info(dynamic_truck_set)
# 用于动态调度的挖机及卸载设备
dynamic_excavator_set = set(update_autodisp_excavator())
dynamic_dump_set = set(update_autodisp_dump())
# 设备映射类, 存储除工作区以外的映射关系
# 其余设备类继承该类
class DeviceMap:
def __init__(self):
self.excavator_uuid_to_index_dict = {}
self.dump_uuid_to_index_dict = {}
self.excavator_index_to_uuid_dict = {}
self.dump_index_to_uuid_dict = {}
self.dump_uuid_to_unload_area_uuid_dict = {}
self.excavator_uuid_to_load_area_uuid_dict = {}
self.excavator_index_to_load_area_index_dict = {}
self.dump_index_to_unload_area_index_dict = {}
self.truck_uuid_to_index_dict = {}
self.truck_index_to_uuid_dict = {}
def load(self):
device_map_dict = update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_dict)
self.excavator_uuid_to_index_dict = device_map_dict['excavator_uuid_to_index_dict']
self.dump_uuid_to_index_dict = device_map_dict['dump_uuid_to_index_dict']
self.excavator_index_to_uuid_dict = device_map_dict['excavator_index_to_uuid_dict']
self.dump_index_to_uuid_dict = device_map_dict['dump_index_to_uuid_dict']
self.dump_uuid_to_unload_area_uuid_dict = device_map_dict['dump_uuid_to_unload_area_uuid_dict']
self.excavator_uuid_to_load_area_uuid_dict = device_map_dict['excavator_uuid_to_load_area_uuid_dict']
self.excavator_index_to_load_area_index_dict = device_map_dict['excavator_index_to_load_area_index_dict']
self.dump_index_to_unload_area_index_dict = device_map_dict['dump_index_to_unload_area_index_dict']
truck_map_dict = update_truck_uuid_index_map(dynamic_truck_set)
self.truck_uuid_to_index_dict = truck_map_dict['truck_uuid_to_index_dict']
self.truck_index_to_uuid_dict = truck_map_dict['truck_index_to_uuid_dict']
# 卸载设备类 # 卸载设备类
class DumpInfo(DeviceMap): class DumpInfo(WalkManage):
def __init__(self): def __init__(self):
super().__init__()
# 卸载设备数量 # 卸载设备数量
self.dumps = len(dynamic_dump_set) self.dynamic_dump_num = len(dynamic_dump_set)
# 目标产量 # 目标产量
self.dump_target_mass = np.zeros(self.dumps) self.dump_target_mass = np.zeros(self.dynamic_dump_num)
# 实际真实产量 # 实际真实产量
self.cur_dump_real_mass = np.zeros(self.dumps) self.cur_dump_real_mass = np.zeros(self.dynamic_dump_num)
# # 预计产量(包含正在驶往目的地的矿卡载重) # # 预计产量(包含正在驶往目的地的矿卡载重)
# self.pre_dump_real_mass = copy.deepcopy(self.cur_dump_real_mass) # self.pre_dump_real_mass = copy.deepcopy(self.cur_dump_real_mass)
# # 模拟实际产量(防止调度修改真实产量) # # 模拟实际产量(防止调度修改真实产量)
# self.sim_dump_real_mass = np.zeros(self.dumps) # self.sim_dump_real_mass = np.zeros(self.dynamic_dump_num)
# # 真实设备可用时间 # # 真实设备可用时间
# self.cur_dump_ava_time = np.zeros(self.dumps) # self.cur_dump_ava_time = np.zeros(self.dynamic_dump_num)
# # 模拟各设备可用时间(防止调度修改真实产量) # # 模拟各设备可用时间(防止调度修改真实产量)
# self.sim_dump_ava_time = np.zeros(self.dumps) # self.sim_dump_ava_time = np.zeros(self.dynamic_dump_num)
# 用于动态调度的卸载设备集合 # 用于动态调度的卸载设备集合
self.dynamic_dump_set = [] self.dynamic_dump_set = []
# 开始时间 # 开始时间
self.start_time = datetime.now() self.start_time = datetime.now()
# 卸载时间 # 卸载时间
self.unloading_time = np.zeros(self.dumps) self.unloading_time = np.zeros(self.dynamic_dump_num)
# 入场时间
self.entrance_time = np.zeros(self.dynamic_dump_num)
# 出场时间
self.exit_time = np.zeros(self.dynamic_dump_num)
def get_unloading_time(self): def get_unloading_time(self):
return self.unloading_time return self.unloading_time
def get_dump_num(self): def get_dump_num(self):
return self.dumps return self.dynamic_dump_num
def get_dump_target_mass(self): def get_dump_target_mass(self):
return self.dump_target_mass return self.dump_target_mass
...@@ -147,7 +61,7 @@ class DumpInfo(DeviceMap): ...@@ -147,7 +61,7 @@ class DumpInfo(DeviceMap):
# 更新卸载设备卸载时间 # 更新卸载设备卸载时间
def update_dump_unloadtime(self): def update_dump_unloadtime(self):
self.unloading_time = np.zeros(self.dumps) self.unloading_time = np.zeros(self.dynamic_dump_num)
for dump_id in self.dump_uuid_to_index_dict.keys(): for dump_id in self.dump_uuid_to_index_dict.keys():
ave_unload_time = 0 ave_unload_time = 0
...@@ -164,12 +78,42 @@ class DumpInfo(DeviceMap): ...@@ -164,12 +78,42 @@ class DumpInfo(DeviceMap):
except Exception as es: except Exception as es:
logger.error(f'卸载设备 {dump_id} 卸载时间信息缺失, 已设为默认值(1min)') logger.error(f'卸载设备 {dump_id} 卸载时间信息缺失, 已设为默认值(1min)')
logger.error(es) logger.error(es)
self.unloading_time[self.dump_uuid_to_index_dict[dump_id]] = 1.00 self.unloading_time[self.dump_uuid_to_index_dict[dump_id]] = 5.00
# print("average_unload_time: ", self.unloading_time[self.dump_uuid_to_index_dict[dump_id]]) # print("average_unload_time: ", self.unloading_time[self.dump_uuid_to_index_dict[dump_id]])
# 更新卸载设备出入时间
def update_dump_entrance_exit_time(self):
self.entrance_time = np.zeros(self.dynamic_dump_num)
self.exit_time = np.zeros(self.dynamic_dump_num)
now = datetime.now().strftime('%Y-%m-%d')
for dump_id in self.dump_uuid_to_index_dict.keys():
try:
for query in session_mysql.query(WorkRecord).filter(WorkRecord.equipment_id == dump_id, \
WorkRecord.work_day > now).first():
self.entrance_time[self.dump_uuid_to_index_dict[dump_id]] = float(query.load_entrance_time / query.load_entrance_count)
self.exit_time[self.dump_uuid_to_index_dict[dump_id]] = float(query.exit_entrance_time / query.exit_entrance_count)
except Exception as es:
logger.error(f'卸载设备 {dump_id} 出入场时间信息缺失, 已设为默认值(1min)')
logger.error(es)
self.entrance_time[self.dump_uuid_to_index_dict[dump_id]] = 0.50
self.exit_time[self.dump_uuid_to_index_dict[dump_id]] = 0.50
# 读取出入场时间
def get_unloading_task_time(self):
unloading_time = self.unloading_time
dump_entrance_time = self.entrance_time
dump_exit_time = self.exit_time
unloading_task_time = unloading_time + dump_entrance_time + dump_exit_time
return unloading_task_time
# 更新卸载设备实际卸载量 # 更新卸载设备实际卸载量
def update_actual_unload_thoughout(self): def update_actual_unload_thoughout(self):
self.cur_dump_real_mass = np.zeros(self.dumps) self.cur_dump_real_mass = np.zeros(self.dynamic_dump_num)
now = datetime.now().strftime('%Y-%m-%d') now = datetime.now().strftime('%Y-%m-%d')
for dump_id in self.dump_uuid_to_index_dict.keys(): for dump_id in self.dump_uuid_to_index_dict.keys():
# print(excavator_id) # print(excavator_id)
...@@ -186,18 +130,20 @@ class DumpInfo(DeviceMap): ...@@ -186,18 +130,20 @@ class DumpInfo(DeviceMap):
print("Dump update!") print("Dump update!")
# 装载设备映射 # 装载周期参数
self.load() self.period_map_para_load()
self.period_walk_para_load()
# # 初始化卸载设备可用时间 # # 初始化卸载设备可用时间
# self.cur_dump_ava_time = np.full(self.dumps, # self.cur_dump_ava_time = np.full(self.dynamic_dump_num,
# (datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, # (datetime.now() - self.start_time) / timedelta(hours=0, minutes=1,
# seconds=0)) # seconds=0))
# 用于动态调度的卸载设备 # 用于动态调度的卸载设备
self.dynamic_dump_set = set(update_autodisp_dump()) self.dynamic_dump_set = set(update_autodisp_dump())
self.dumps = len(self.dynamic_dump_set) self.dynamic_dump_num = len(self.dynamic_dump_set)
# 计算平均卸载时间 # 计算平均卸载时间
self.update_dump_unloadtime() self.update_dump_unloadtime()
...@@ -206,7 +152,7 @@ class DumpInfo(DeviceMap): ...@@ -206,7 +152,7 @@ class DumpInfo(DeviceMap):
self.update_actual_unload_thoughout() self.update_actual_unload_thoughout()
# 卸载目标产量 # 卸载目标产量
self.dump_target_mass = np.full(self.dumps, dump_target_mass) self.dump_target_mass = np.full(self.dynamic_dump_num, dump_target_mass)
# # 同步虚拟卸载量 # # 同步虚拟卸载量
# self.sim_dump_real_mass = copy.deepcopy(self.cur_dump_real_mass) # self.sim_dump_real_mass = copy.deepcopy(self.cur_dump_real_mass)
...@@ -216,35 +162,54 @@ class DumpInfo(DeviceMap): ...@@ -216,35 +162,54 @@ class DumpInfo(DeviceMap):
# 挖机设备类 # 挖机设备类
class ExcavatorInfo(DeviceMap): class ExcavatorInfo(WalkManage):
def __init__(self): def __init__(self):
super().__init__()
# 装载设备数量 # 装载设备数量
self.excavators = len(dynamic_excavator_set) self.dynamic_excavator_num = len(dynamic_excavator_set)
# 目标产量 # 目标产量
self.excavator_target_mass = np.zeros(self.excavators) self.excavator_target_mass = np.zeros(self.dynamic_excavator_num)
# 真实实际产量 # 真实实际产量
self.cur_excavator_real_mass = np.zeros(self.excavators) self.cur_excavator_real_mass = np.zeros(self.dynamic_excavator_num)
# # 预计产量(包含正在驶往目的地的矿卡载重) # # 预计产量(包含正在驶往目的地的矿卡载重)
# self.pre_excavator_real_mass = copy.deepcopy(self.cur_excavator_real_mass) # self.pre_excavator_real_mass = copy.deepcopy(self.cur_excavator_real_mass)
# # 模拟实际产量(防止调度修改真实产量) # # 模拟实际产量(防止调度修改真实产量)
# self.sim_excavator_real_mass = np.zeros(self.excavators) # self.sim_excavator_real_mass = np.zeros(self.dynamic_excavator_num)
# # 真实设备可用时间 # # 真实设备可用时间
# self.cur_excavator_ava_time = np.zeros(self.excavators) # self.cur_excavator_ava_time = np.zeros(self.dynamic_excavator_num)
# # 模拟各设备可用时间(防止调度修改真实产量) # # 模拟各设备可用时间(防止调度修改真实产量)
# self.sim_excavator_ava_time = np.zeros(self.excavators) # self.sim_excavator_ava_time = np.zeros(self.dynamic_excavator_num)
# 用于动态调度的卸载设备集合 # 用于动态调度的卸载设备集合
self.dynamic_excavator_set = [] self.dynamic_excavator_set = []
# 开始时间 # 开始时间
self.start_time = datetime.now() self.start_time = datetime.now()
# 装载时间 # 装载时间
self.loading_time = np.zeros(self.excavators) self.loading_time = np.zeros(self.dynamic_excavator_num)
# 入场时间
self.entrance_time = np.zeros(self.dynamic_excavator_num)
# 出场时间
self.exit_time = np.zeros(self.dynamic_excavator_num)
# def period_map_para_load(self):
# # 关系映射
# self.excavator_uuid_to_index_dict = device_map.excavator_uuid_to_index_dict
# self.dump_uuid_to_index_dict = device_map.dump_uuid_to_index_dict
# self.excavator_index_to_uuid_dict = device_map.excavator_index_to_uuid_dict
# self.dump_index_to_uuid_dict = device_map.dump_index_to_uuid_dict
#
# self.dump_uuid_to_unload_area_uuid_dict = device_map.dump_uuid_to_unload_area_uuid_dict
# self.excavator_uuid_to_load_area_uuid_dict = device_map.excavator_uuid_to_load_area_uuid_dict
# self.excavator_index_to_load_area_index_dict = device_map.excavator_index_to_load_area_index_dict
# self.dump_index_to_unload_area_index_dict = device_map.dump_index_to_unload_area_index_dict
#
# def period_walk_para_load(self):
# self.truck_uuid_to_index_dict = device_map.truck_uuid_to_index_dict
# self.truck_index_to_uuid_dict = device_map.truck_index_to_uuid_dict
def get_loading_time(self): def get_loading_time(self):
return self.loading_time return self.loading_time
def get_excavator_num(self): def get_excavator_num(self):
return self.excavators return self.dynamic_excavator_num
def get_excavator_target_mass(self): def get_excavator_target_mass(self):
return self.excavator_target_mass return self.excavator_target_mass
...@@ -257,7 +222,7 @@ class ExcavatorInfo(DeviceMap): ...@@ -257,7 +222,7 @@ class ExcavatorInfo(DeviceMap):
# 更新挖机装载时间 # 更新挖机装载时间
def update_excavator_loadtime(self): def update_excavator_loadtime(self):
self.loading_time = np.zeros(self.excavators) self.loading_time = np.zeros(self.dynamic_excavator_num)
for excavator_id in self.excavator_uuid_to_index_dict.keys(): for excavator_id in self.excavator_uuid_to_index_dict.keys():
ave_load_time = 0 ave_load_time = 0
...@@ -274,11 +239,41 @@ class ExcavatorInfo(DeviceMap): ...@@ -274,11 +239,41 @@ class ExcavatorInfo(DeviceMap):
except Exception as es: except Exception as es:
logger.error(f'挖机 {excavator_id} 装载时间信息缺失, 已设为默认值(1min)') logger.error(f'挖机 {excavator_id} 装载时间信息缺失, 已设为默认值(1min)')
logger.error(es) logger.error(es)
self.loading_time[self.excavator_uuid_to_index_dict[excavator_id]] = 1.00 self.loading_time[self.excavator_uuid_to_index_dict[excavator_id]] = 5.00
# 更新挖机设备出入时间
def update_excavator_entrance_exit_time(self):
self.entrance_time = np.zeros(self.dynamic_excavator_num)
self.exit_time = np.zeros(self.dynamic_excavator_num)
now = datetime.now().strftime('%Y-%m-%d')
for excavator_id in self.excavator_uuid_to_index_dict.keys():
try:
for query in session_mysql.query(WorkRecord).filter(WorkRecord.equipment_id == excavator_id, \
WorkRecord.work_day > now).first():
self.entrance_time[self.excavator_uuid_to_index_dict[excavator_id]] = float(query.load_entrance_time / query.load_entrance_count)
self.exit_time[self.excavator_uuid_to_index_dict[excavator_id]] = float(query.exit_entrance_time / query.exit_entrance_count)
except Exception as es:
logger.error(f'挖机设备 {excavator_id} 出入场时间信息缺失, 已设为默认值(1min)')
logger.error(es)
self.entrance_time[self.excavator_uuid_to_index_dict[excavator_id]] = 0.50
self.exit_time[self.excavator_uuid_to_index_dict[excavator_id]] = 0.50
# 读取出入场时间
def get_loading_task_time(self):
loading_time = self.loading_time
excavator_entrance_time = self.entrance_time
excavator_exit_time = self.exit_time
loading_task_time = loading_time + excavator_entrance_time + excavator_exit_time
return loading_task_time
# 更新挖机实际装载量 # 更新挖机实际装载量
def update_actual_load_throughout(self): def update_actual_load_throughout(self):
self.cur_excavator_real_mass = np.zeros(self.excavators) self.cur_excavator_real_mass = np.zeros(self.dynamic_excavator_num)
now = datetime.now().strftime('%Y-%m-%d') now = datetime.now().strftime('%Y-%m-%d')
for excavator_id in self.excavator_uuid_to_index_dict.keys(): for excavator_id in self.excavator_uuid_to_index_dict.keys():
# print(excavator_id) # print(excavator_id)
...@@ -295,18 +290,20 @@ class ExcavatorInfo(DeviceMap): ...@@ -295,18 +290,20 @@ class ExcavatorInfo(DeviceMap):
print("Excavator update!") print("Excavator update!")
# 装载映射关系 # 装载周期参数
self.load() self.period_map_para_load()
self.period_walk_para_load()
# # 初始化挖机可用时间 # # 初始化挖机可用时间
# self.cur_excavator_ava_time = np.full(self.excavators, # self.cur_excavator_ava_time = np.full(self.dynamic_excavator_num,
# (datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, # (datetime.now() - self.start_time) / timedelta(hours=0, minutes=1,
# seconds=0)) # seconds=0))
# 用于动态调度的挖机设备 # 用于动态调度的挖机设备
self.dynamic_excavator_set = set(update_autodisp_excavator()) self.dynamic_excavator_set = set(update_autodisp_excavator())
self.excavators = len(self.dynamic_excavator_set) self.dynamic_excavator_num = len(self.dynamic_excavator_set)
# 计算平均装载时间 # 计算平均装载时间
self.update_excavator_loadtime() self.update_excavator_loadtime()
...@@ -315,7 +312,7 @@ class ExcavatorInfo(DeviceMap): ...@@ -315,7 +312,7 @@ class ExcavatorInfo(DeviceMap):
self.update_actual_load_throughout() self.update_actual_load_throughout()
# 挖机目标产量 # 挖机目标产量
self.excavator_target_mass = np.full(self.excavators, excavator_target_mass) self.excavator_target_mass = np.full(self.dynamic_excavator_num, excavator_target_mass)
# # 同步挖机虚拟装载量 # # 同步挖机虚拟装载量
# self.sim_excavator_real_mass = copy.deepcopy(self.cur_excavator_real_mass) # self.sim_excavator_real_mass = copy.deepcopy(self.cur_excavator_real_mass)
...@@ -324,118 +321,129 @@ class ExcavatorInfo(DeviceMap): ...@@ -324,118 +321,129 @@ class ExcavatorInfo(DeviceMap):
# self.update_pre_load_throughout() # self.update_pre_load_throughout()
# 路网信息类 # # 路网信息类
class WalkManage(DeviceMap): # class WalkManage(DeviceMap):
def __init__(self): # def __init__(self):
super().__init__() # # 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备
# 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备 # # 行走时间(面向路网)
# 行走时间(面向路网) # self.walk_time_to_load_area = np.full((unload_area_num, load_area_num), M)
self.com_time_area = np.full((unload_area_num, load_area_num), M) # self.walk_time_to_unload_area = np.full((unload_area_num, load_area_num), M)
self.go_time_area = np.full((unload_area_num, load_area_num), M) # # 行走时间(面向设备)
# 行走时间(面向设备) # self.walk_time_to_excavator = np.full((len(set(update_autodisp_dump())), len(set(update_autodisp_excavator()))), M)
self.com_time_eq = np.full((len(set(update_autodisp_dump())), len(set(update_autodisp_excavator()))), M) # self.walk_time_to_dump = np.full((len(set(update_autodisp_dump())), len(set(update_autodisp_excavator()))), M)
self.go_time_eq = np.full((len(set(update_autodisp_dump())), len(set(update_autodisp_excavator()))), M) # # 备停区行走时间(面向路网)
# 备停区行走时间(面向路网) # self.walk_time_park_to_load_area = np.full((park_num, load_area_num), M)
self.park_to_load_area = np.full((park_num, load_area_num), M) # # 备停区行走时间(面向设备)
# 备停区行走时间(面向设备) # self.walk_time_park_to_excavator = np.full((park_num, len(update_autodisp_excavator())), M)
self.park_to_load_eq = np.full((park_num, len(update_autodisp_excavator())), M) #
# def load(self):
def get_com_time_area(self): # # 关系映射
return self.com_time_area # self.excavator_uuid_to_index_dict = device_map.excavator_uuid_to_index_dict
# self.dump_uuid_to_index_dict = device_map.dump_uuid_to_index_dict
def get_go_time_area(self): # self.excavator_index_to_uuid_dict = device_map.excavator_index_to_uuid_dict
return self.go_time_area # self.dump_index_to_uuid_dict = device_map.dump_index_to_uuid_dict
#
def get_com_time_eq(self): # self.dump_uuid_to_unload_area_uuid_dict = device_map.dump_uuid_to_unload_area_uuid_dict
return self.com_time_eq # self.excavator_uuid_to_load_area_uuid_dict = device_map.excavator_uuid_to_load_area_uuid_dict
# self.excavator_index_to_load_area_index_dict = device_map.excavator_index_to_load_area_index_dict
def get_go_time_eq(self): # self.dump_index_to_unload_area_index_dict = device_map.dump_index_to_unload_area_index_dict
return self.go_time_eq #
# self.truck_uuid_to_index_dict = device_map.truck_uuid_to_index_dict
def get_park_to_load_area(self): # self.truck_index_to_uuid_dict = device_map.truck_index_to_uuid_dict
return self.park_to_load_area #
# def get_walk_time_to_load_area(self):
def get_park_to_load_eq(self): # return self.walk_time_to_load_area
return self.park_to_load_eq #
# def get_walk_time_to_unload_area(self):
def update_walk_time(self): # return self.walk_time_to_unload_area
#
self.load() # def get_walk_time_to_excavator(self):
# return self.walk_time_to_excavator
dump_num = len(set(update_autodisp_dump())) #
excavator_num = len(set(update_autodisp_excavator())) # def get_walk_time_to_dump(self):
# return self.walk_time_to_dump
self.com_time_eq = np.full((dump_num, excavator_num), M) #
self.go_time_eq = np.full((dump_num, excavator_num), M) # def get_walk_time_park_to_load_area(self):
self.park_to_load_eq = np.full((park_num, excavator_num), M) # return self.walk_time_park_to_load_area
#
# 计算路网行走时间 # def get_walk_time_park_to_excavator(self):
try: # return self.walk_time_park_to_excavator
# 处理距离 #
for item in session_postgre.query(WalkTime).all(): # def update_walk_time(self):
load_area = str(item.load_area_id) #
unload_area = str(item.unload_area_id) # self.load()
load_area_index = load_area_uuid_to_index_dict[load_area] #
unload_area_index = unload_area_uuid_to_index_dict[unload_area] # dump_num = len(set(update_autodisp_dump()))
self.com_time_area[unload_area_index][load_area_index] = float( # excavator_num = len(set(update_autodisp_excavator()))
60 / 1000 * item.to_load_distance / empty_speed) #
self.go_time_area[unload_area_index][load_area_index] = float( # self.walk_time_to_excavator = np.full((dump_num, excavator_num), M)
60 / 1000 * item.to_unload_distance / heavy_speed) # self.walk_time_to_dump = np.full((dump_num, excavator_num), M)
except Exception as es: # self.walk_time_park_to_excavator = np.full((park_num, excavator_num), M)
logger.error("路网信息异常") #
logger.error(es) # # 计算路网行走时间
# try:
# 计算设备路网行走时间 # # 处理距离
try: # for item in session_postgre.query(WalkTime).all():
# load_area = str(item.load_area_id)
for i in range(dump_num): # unload_area = str(item.unload_area_id)
for j in range(excavator_num): # load_area_index = load_area_uuid_to_index_dict[load_area]
self.com_time_eq[i][j] = self.com_time_area[self.dump_index_to_unload_area_index_dict[i]] \ # unload_area_index = unload_area_uuid_to_index_dict[unload_area]
[self.excavator_index_to_load_area_index_dict[j]] # self.walk_time_to_load_area[unload_area_index][load_area_index] = float(
self.go_time_eq[i][j] = self.go_time_area[self.dump_index_to_unload_area_index_dict[i]] \ # 60 / 1000 * item.to_load_distance / empty_speed)
[self.excavator_index_to_load_area_index_dict[j]] # self.walk_time_to_unload_area[unload_area_index][load_area_index] = float(
# 60 / 1000 * item.to_unload_distance / heavy_speed)
except Exception as es: # except Exception as es:
logger.error("设备路网信息异常异常") # logger.error("路网信息异常")
logger.error(es) # logger.error(es)
#
try: # # 计算设备路网行走时间
# # try:
for item in session_postgre.query(WalkTimePark).all(): #
load_area = str(item.load_area_id) # print(self.excavator_index_to_load_area_index_dict)
park_area = str(item.park_area_id) #
load_area_index = load_area_uuid_to_index_dict[load_area] # for i in range(dump_num):
park_index = park_uuid_to_index_dict[park_area] # for j in range(excavator_num):
self.park_to_load_area[park_index][load_area_index] = 60 / 1000 * item.park_load_distance / empty_speed # self.walk_time_to_excavator[i][j] = self.walk_time_to_load_area[self.dump_index_to_unload_area_index_dict[i]] \
# [self.excavator_index_to_load_area_index_dict[j]]
except Exception as es: # self.walk_time_to_dump[i][j] = self.walk_time_to_unload_area[self.dump_index_to_unload_area_index_dict[i]] \
logger.error("备停区路网信息异常") # [self.excavator_index_to_load_area_index_dict[j]]
logger.error(es) #
# # except Exception as es:
try: # # logger.error("设备路网信息异常异常")
# # logger.error(es)
for i in range(park_num): #
for j in range(excavator_num): # try:
self.park_to_load_eq[i][j] = self.park_to_load_area[i][ # for item in session_postgre.query(WalkTimePark).all():
self.excavator_index_to_load_area_index_dict[j]] # load_area = str(item.load_area_id)
# park_area = str(item.park_area_id)
except Exception as es: # load_area_index = load_area_uuid_to_index_dict[load_area]
logger.error("备停区设备路网信息异常") # park_index = park_uuid_to_index_dict[park_area]
logger.error(es) # self.walk_time_park_to_load_area[park_index][load_area_index] = 60 / 1000 * item.park_load_distance / empty_speed
# except Exception as es:
# logger.error("备停区路网信息异常")
# logger.error(es)
#
# try:
# for i in range(park_num):
# for j in range(excavator_num):
# self.walk_time_park_to_excavator[i][j] = self.walk_time_park_to_load_area[i][
# self.excavator_index_to_load_area_index_dict[j]]
# except Exception as es:
# logger.error("备停区设备路网信息异常")
# logger.error(es)
# 矿卡设备类 # 矿卡设备类
class TruckInfo(DeviceMap): class TruckInfo(WalkManage):
def __init__(self): def __init__(self):
super().__init__()
# object fileds # object fileds
self.walker = WalkManage() # self.walker = WalkManage()
# 矿卡数量 # 矿卡数量
self.trucks = len(dynamic_truck_set) self.dynamic_truck_num = len(dynamic_truck_set)
# 矿卡抵达卸载设备时间 # 矿卡抵达卸载设备时间
self.cur_truck_reach_dump = np.zeros(self.trucks) self.cur_truck_reach_dump = np.zeros(self.dynamic_truck_num)
# 矿卡抵达挖机时间 # 矿卡抵达挖机时间
self.cur_truck_reach_excavator = np.zeros(self.trucks) self.cur_truck_reach_excavator = np.zeros(self.dynamic_truck_num)
# 用于动态派车的矿卡集合 # 用于动态派车的矿卡集合
self.dynamic_truck_set = [] self.dynamic_truck_set = []
# 矿卡最后装载/卸载时间 # 矿卡最后装载/卸载时间
...@@ -449,12 +457,36 @@ class TruckInfo(DeviceMap): ...@@ -449,12 +457,36 @@ class TruckInfo(DeviceMap):
# 调度开始时间 # 调度开始时间
self.start_time = datetime.now() self.start_time = datetime.now()
# # 卡车完成装载及卸载时间 # # 卡车完成装载及卸载时间
# self.cur_truck_ava_time = np.zeros(self.trucks) # self.cur_truck_ava_time = np.zeros(self.dynamic_truck_num)
# self.sim_truck_ava_time = np.zeros(self.trucks) # self.sim_truck_ava_time = np.zeros(self.dynamic_truck_num)
# 矿卡有效载重 # 矿卡有效载重
self.payload = np.zeros(self.trucks) self.payload = np.zeros(self.dynamic_truck_num)
# 矿卡当前行程(第一列为出发地序号, 第二列为目的地序号) # 矿卡当前行程(第一列为出发地序号, 第二列为目的地序号)
self.truck_current_trip = np.full((self.trucks, 2), -1) self.truck_current_trip = np.full((self.dynamic_truck_num, 2), -1)
# def period_map_para_load(self):
# # 关系映射
# self.excavator_uuid_to_index_dict = device_map.excavator_uuid_to_index_dict
# self.dump_uuid_to_index_dict = device_map.dump_uuid_to_index_dict
# self.excavator_index_to_uuid_dict = device_map.excavator_index_to_uuid_dict
# self.dump_index_to_uuid_dict = device_map.dump_index_to_uuid_dict
#
# self.dump_uuid_to_unload_area_uuid_dict = device_map.dump_uuid_to_unload_area_uuid_dict
# self.excavator_uuid_to_load_area_uuid_dict = device_map.excavator_uuid_to_load_area_uuid_dict
# self.excavator_index_to_load_area_index_dict = device_map.excavator_index_to_load_area_index_dict
# self.dump_index_to_unload_area_index_dict = device_map.dump_index_to_unload_area_index_dict
#
# self.truck_uuid_to_index_dict = device_map.truck_uuid_to_index_dict
# self.truck_index_to_uuid_dict = device_map.truck_index_to_uuid_dict
# def period_walk_para_load(self):
#
# self.walk_time_to_excavator = walk_manage.walk_time_to_excavator
# self.walk_time_to_dump = walk_manage.walk_time_to_dump
# self.walk_time_park_to_excavator = walk_manage.walk_time_park_to_excavator
# self.walk_time_to_load_area = walk_manage.walk_time_to_load_area
# self.walk_time_to_unload_area = walk_manage.walk_time_to_unload_area
def get_truck_current_trip(self): def get_truck_current_trip(self):
return self.truck_current_trip return self.truck_current_trip
...@@ -463,7 +495,7 @@ class TruckInfo(DeviceMap): ...@@ -463,7 +495,7 @@ class TruckInfo(DeviceMap):
return self.truck_current_task return self.truck_current_task
def get_truck_num(self): def get_truck_num(self):
return self.trucks return self.dynamic_truck_num
def get_truck_reach_dump(self): def get_truck_reach_dump(self):
return self.cur_truck_reach_dump return self.cur_truck_reach_dump
...@@ -489,9 +521,9 @@ class TruckInfo(DeviceMap): ...@@ -489,9 +521,9 @@ class TruckInfo(DeviceMap):
self.truck_current_task = {} self.truck_current_task = {}
device_name_set = redis2.keys() device_name_set = redis2.keys()
try: # try:
for item in device_name_set: for item in device_name_set:
try:
item = item.decode(encoding='utf-8') item = item.decode(encoding='utf-8')
json_value = json.loads(redis2.get(item)) json_value = json.loads(redis2.get(item))
device_type = json_value.get('type') device_type = json_value.get('type')
...@@ -499,18 +531,21 @@ class TruckInfo(DeviceMap): ...@@ -499,18 +531,21 @@ class TruckInfo(DeviceMap):
if truck_name_to_uuid_dict[item] in self.dynamic_truck_set: if truck_name_to_uuid_dict[item] in self.dynamic_truck_set:
currentTask = json_value.get('currentTask') currentTask = json_value.get('currentTask')
self.truck_current_task[truck_name_to_uuid_dict[item]] = currentTask self.truck_current_task[truck_name_to_uuid_dict[item]] = currentTask
except Exception as es: except Exception as es:
logger.error("读取矿卡任务异常-reids读取异常") logger.error("读取矿卡任务异常-reids读取异常")
logger.error(es) logger.error(es)
# except Exception as es:
# logger.error("读取矿卡任务异常-reids读取异常")
# logger.error(es)
logger.info("矿卡当前任务:") logger.info("矿卡当前任务:")
logger.info(self.truck_current_task) logger.info(self.truck_current_task)
# 更新矿卡实际容量 # 更新矿卡实际容量
def update_truck_payload(self): def update_truck_payload(self):
try: try:
self.payload = np.zeros(self.trucks) self.payload = np.zeros(self.dynamic_truck_num)
for truck_id in self.dynamic_truck_set: for truck_id in self.dynamic_truck_set:
trcuk_index = self.truck_uuid_to_index_dict[truck_id] trcuk_index = self.truck_uuid_to_index_dict[truck_id]
truck_spec = session_mysql.query(Equipment).filter_by(id=truck_id).first().equipment_spec truck_spec = session_mysql.query(Equipment).filter_by(id=truck_id).first().equipment_spec
...@@ -555,11 +590,18 @@ class TruckInfo(DeviceMap): ...@@ -555,11 +590,18 @@ class TruckInfo(DeviceMap):
"%b %d, %Y %I:%M:%S %p") "%b %d, %Y %I:%M:%S %p")
else: else:
self.last_unload_time[item] = datetime.now() self.last_unload_time[item] = datetime.now()
json_value['lastUnloadTime'] = datetime.now().strftime('%b %d, %Y %#I:%#M:%#S %p')
redis2.set(truck_uuid_to_name_dict[item], str(json.dumps(json_value)))
logger.info('lastUnlaodTime is None')
self.relative_last_unload_time[item] = float((self.last_unload_time[item] - self.start_time) / self.relative_last_unload_time[item] = float((self.last_unload_time[item] - self.start_time) /
timedelta(hours=0, minutes=1, seconds=0)) timedelta(hours=0, minutes=1, seconds=0))
# print("相对last_unload_time", self.relative_last_unload_time[item]) # print("相对last_unload_time", self.relative_last_unload_time[item])
logger.info("相对last_unload_time") logger.info("相对last_unload_time")
logger.info(self.relative_last_unload_time[item]) logger.info(self.relative_last_unload_time[item])
elif task == -2:
self.last_unload_time[item] = datetime.now()
json_value['lastUnloadTime'] = datetime.now().strftime('%b %d, %Y %#I:%#M:%#S %p')
redis2.set(truck_uuid_to_name_dict[item], str(json.dumps(json_value)))
except Exception as es: except Exception as es:
logger.error("读取矿卡可用时间异常-redis读取异常") logger.error("读取矿卡可用时间异常-redis读取异常")
logger.error(es) logger.error(es)
...@@ -567,12 +609,12 @@ class TruckInfo(DeviceMap): ...@@ -567,12 +609,12 @@ class TruckInfo(DeviceMap):
# 更新矿卡行程 # 更新矿卡行程
def update_truck_trip(self): def update_truck_trip(self):
com_time_area = self.walker.get_com_time_area() walk_time_to_load_area = walk_manage.get_walk_time_to_load_area()
go_time_area = self.walker.get_go_time_area() walk_time_to_unload_area = walk_manage.get_walk_time_to_unload_area()
# 初始化矿卡行程, -1代表备停区 # 初始化矿卡行程, -1代表备停区
self.truck_current_trip = np.full((self.trucks, 2), -1) self.truck_current_trip = np.full((self.dynamic_truck_num, 2), -1)
for i in range(self.trucks): for i in range(self.dynamic_truck_num):
try: try:
session_mysql.commit() session_mysql.commit()
truck_id = self.truck_index_to_uuid_dict[i] truck_id = self.truck_index_to_uuid_dict[i]
...@@ -598,10 +640,10 @@ class TruckInfo(DeviceMap): ...@@ -598,10 +640,10 @@ class TruckInfo(DeviceMap):
self.excavator_uuid_to_index_dict[item.exactor_id]] self.excavator_uuid_to_index_dict[item.exactor_id]]
# if truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[i]] in tmp_set: # if truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[i]] in tmp_set:
# print("here") # print("here")
# self.cur_truck_reach_excavator[i] = last_unload_time + 10 * self.com_time_area[start_area_index][ # self.cur_truck_reach_excavator[i] = last_unload_time + 10 * self.walk_time_to_load_area[start_area_index][
# end_area_index] # end_area_index]
# else: # else:
self.cur_truck_reach_excavator[i] = last_unload_time + com_time_area[start_area_index][ self.cur_truck_reach_excavator[i] = last_unload_time + walk_time_to_load_area[start_area_index][
end_area_index] end_area_index]
# 若矿卡状态为重载 # 若矿卡状态为重载
elif task in heavy_task_set: elif task in heavy_task_set:
...@@ -618,7 +660,7 @@ class TruckInfo(DeviceMap): ...@@ -618,7 +660,7 @@ class TruckInfo(DeviceMap):
end_area_index = unload_area_uuid_to_index_dict[end_area_id] end_area_index = unload_area_uuid_to_index_dict[end_area_id]
self.truck_current_trip[i] = [self.excavator_uuid_to_index_dict[item.exactor_id], self.truck_current_trip[i] = [self.excavator_uuid_to_index_dict[item.exactor_id],
self.dump_uuid_to_index_dict[item.dump_id]] self.dump_uuid_to_index_dict[item.dump_id]]
self.cur_truck_reach_dump[i] = last_load_time + go_time_area[end_area_index][start_area_index] self.cur_truck_reach_dump[i] = last_load_time + walk_time_to_unload_area[end_area_index][start_area_index]
# 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡 # 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡
else: else:
pass pass
...@@ -634,11 +676,13 @@ class TruckInfo(DeviceMap): ...@@ -634,11 +676,13 @@ class TruckInfo(DeviceMap):
print("Truck update!") print("Truck update!")
# 更新行走队形 # # 更新行走队形
self.walker.update_walk_time() # self.walker.update_walk_time()
# 更新装载映射关系 # 装载周期参数
self.load() self.period_map_para_load()
self.period_walk_para_load()
# 更新全部矿卡设备集合 # 更新全部矿卡设备集合
truck_set = set(update_total_truck()) truck_set = set(update_total_truck())
...@@ -650,7 +694,7 @@ class TruckInfo(DeviceMap): ...@@ -650,7 +694,7 @@ class TruckInfo(DeviceMap):
self.dynamic_truck_set = truck_set.difference(fixed_truck_set) self.dynamic_truck_set = truck_set.difference(fixed_truck_set)
# 更新矿卡数量 # 更新矿卡数量
self.trucks = len(self.dynamic_truck_set) self.dynamic_truck_num = len(self.dynamic_truck_set)
# 更新卡车当前任务 # 更新卡车当前任务
self.update_truck_current_task() self.update_truck_current_task()
...@@ -666,13 +710,13 @@ class TruckInfo(DeviceMap): ...@@ -666,13 +710,13 @@ class TruckInfo(DeviceMap):
# 调度类 # 调度类
class Dispatcher(DeviceMap): class Dispatcher(WalkManage):
def __init__(self): def __init__(self):
# object fields # object fields
self.dump = DumpInfo() self.dump = DumpInfo()
self.excavator = ExcavatorInfo() self.excavator = ExcavatorInfo()
self.truck = TruckInfo() self.truck = TruckInfo()
self.walker = WalkManage() # self.walker = WalkManage()
# 模拟挖机/卸载设备产量(防止调度修改真实产量) # 模拟挖机/卸载设备产量(防止调度修改真实产量)
self.sim_dump_real_mass = np.zeros(self.dump.get_dump_num()) self.sim_dump_real_mass = np.zeros(self.dump.get_dump_num())
...@@ -718,7 +762,7 @@ class Dispatcher(DeviceMap): ...@@ -718,7 +762,7 @@ class Dispatcher(DeviceMap):
# 更新矿卡预计抵达目的地时间 # 更新矿卡预计抵达目的地时间
def update_truck_reach_time(self): def update_truck_reach_time(self):
try: try:
excavators = self.excavator.get_excavator_num() dynamic_excavator_num = self.excavator.get_excavator_num()
dumps = self.dump.get_dump_num() dumps = self.dump.get_dump_num()
trucks = self.truck.get_truck_num() trucks = self.truck.get_truck_num()
...@@ -730,20 +774,24 @@ class Dispatcher(DeviceMap): ...@@ -730,20 +774,24 @@ class Dispatcher(DeviceMap):
cur_truck_reach_dump = self.truck.get_truck_reach_dump() cur_truck_reach_dump = self.truck.get_truck_reach_dump()
excavator_ava_ls = [[] for _ in range(excavators)] excavator_ava_ls = [[] for _ in range(dynamic_excavator_num)]
dump_ava_ls = [[] for _ in range(dumps)] dump_ava_ls = [[] for _ in range(dumps)]
for i in range(trucks): for i in range(trucks):
task = truck_current_task[self.truck_index_to_uuid_dict[i]] task = truck_current_task[self.truck_index_to_uuid_dict[i]]
end_area_index = truck_current_trip[i][1] end_area_index = truck_current_trip[i][1]
if task in empty_task_set: if task in [0, 1]:
reach_time = cur_truck_reach_excavator[i] reach_time = cur_truck_reach_excavator[i]
excavator_ava_ls[end_area_index].append([reach_time, i, end_area_index]) excavator_ava_ls[end_area_index].append([reach_time, i, end_area_index])
elif task in heavy_task_set: elif task in [3, 4]:
reach_time = cur_truck_reach_dump[i] reach_time = cur_truck_reach_dump[i]
dump_ava_ls[end_area_index].append([reach_time, i, end_area_index]) dump_ava_ls[end_area_index].append([reach_time, i, end_area_index])
elif task == -2: elif task == -2:
self.cur_truck_ava_time[i] = (datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, self.cur_truck_ava_time[i] = (datetime.now() - self.start_time) / timedelta(hours=0, minutes=1,
seconds=0) seconds=0)
print(self.truck_index_to_uuid_dict)
print(excavator_ava_ls)
print(dump_ava_ls)
except Exception as es: except Exception as es:
logger.error("矿卡预计抵达时间计算异常") logger.error("矿卡预计抵达时间计算异常")
logger.error(es) logger.error(es)
...@@ -753,8 +801,15 @@ class Dispatcher(DeviceMap): ...@@ -753,8 +801,15 @@ class Dispatcher(DeviceMap):
# 更新挖机预计可用时间 # 更新挖机预计可用时间
def update_excavator_ava_time(self, excavator_ava_ls): def update_excavator_ava_time(self, excavator_ava_ls):
# 初始化挖机可用时间
self.cur_excavator_ava_time = np.full(dynamic_excavator_num,
(datetime.now() - self.start_time) / timedelta(hours=0, minutes=1,
seconds=0))
loading_time = self.excavator.get_loading_time() loading_time = self.excavator.get_loading_time()
loading_task_time = self.excavator.get_loading_task_time()
try: try:
now = float((datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, seconds=0)) now = float((datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, seconds=0))
...@@ -767,14 +822,14 @@ class Dispatcher(DeviceMap): ...@@ -767,14 +822,14 @@ class Dispatcher(DeviceMap):
excavator_index = int(tmp[i][2]) excavator_index = int(tmp[i][2])
self.cur_excavator_ava_time[excavator_index] = max(tmp[i][0], self.cur_excavator_ava_time[excavator_index] = max(tmp[i][0],
self.cur_excavator_ava_time[excavator_index]) + \ self.cur_excavator_ava_time[excavator_index]) + \
loading_time[excavator_index] loading_task_time[excavator_index]
self.cur_truck_ava_time[int(tmp[i][1])] = self.cur_excavator_ava_time[excavator_index] self.cur_truck_ava_time[int(tmp[i][1])] = self.cur_excavator_ava_time[excavator_index]
# 若挖机可用时间严重偏离,进行修正 # # 若挖机可用时间严重偏离,进行修正
if abs(self.cur_excavator_ava_time[excavator_index] - now) > 60: # if abs(self.cur_excavator_ava_time[excavator_index] - now) > 60:
self.cur_truck_ava_time[int(tmp[i][1])] = now # self.cur_truck_ava_time[int(tmp[i][1])] = now
if abs(self.cur_excavator_ava_time[excavator_index] - now) > 60: # if abs(self.cur_excavator_ava_time[excavator_index] - now) > 60:
self.cur_excavator_ava_time[excavator_index] = now # self.cur_excavator_ava_time[excavator_index] = now
except Exception as es: except Exception as es:
logger.error("挖机可用时间计算异常") logger.error("挖机可用时间计算异常")
logger.error(es) logger.error(es)
...@@ -782,8 +837,17 @@ class Dispatcher(DeviceMap): ...@@ -782,8 +837,17 @@ class Dispatcher(DeviceMap):
# 更新卸载设备预计可用时间 # 更新卸载设备预计可用时间
def update_dump_ava_time(self, dump_ava_ls): def update_dump_ava_time(self, dump_ava_ls):
dynamic_dump_num = self.dump.get_dump_num()
# 初始化卸载设备可用时间
self.cur_dump_ava_time = np.full(dynamic_dump_num,
(datetime.now() - self.start_time) / timedelta(hours=0, minutes=1,
seconds=0))
unloading_time = self.dump.get_unloading_time() unloading_time = self.dump.get_unloading_time()
unloading_task_time = self.dump.get_unloading_task_time()
try: try:
now = float((datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, seconds=0)) now = float((datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, seconds=0))
...@@ -795,14 +859,14 @@ class Dispatcher(DeviceMap): ...@@ -795,14 +859,14 @@ class Dispatcher(DeviceMap):
for i in range(len(tmp)): for i in range(len(tmp)):
dump_index = int(tmp[i][2]) dump_index = int(tmp[i][2])
self.cur_dump_ava_time[dump_index] = max(tmp[i][0], self.cur_dump_ava_time[dump_index]) + \ self.cur_dump_ava_time[dump_index] = max(tmp[i][0], self.cur_dump_ava_time[dump_index]) + \
unloading_time[dump_index] unloading_task_time[dump_index]
self.cur_truck_ava_time[int(tmp[i][1])] = self.cur_dump_ava_time[dump_index] self.cur_truck_ava_time[int(tmp[i][1])] = self.cur_dump_ava_time[dump_index]
# 若卸载设备可用时间严重偏离,进行修正 # # 若卸载设备可用时间严重偏离,进行修正
if abs(self.cur_dump_ava_time[dump_index] - now) > 60: # if abs(self.cur_dump_ava_time[dump_index] - now) > 60:
self.cur_dump_ava_time[dump_index] = now # self.cur_dump_ava_time[dump_index] = now
if abs(self.cur_truck_ava_time[int(tmp[i][1])] - now) > 60: # if abs(self.cur_truck_ava_time[int(tmp[i][1])] - now) > 60:
self.cur_truck_ava_time[int(tmp[i][1])] = now # self.cur_truck_ava_time[int(tmp[i][1])] = now
except Exception as es: except Exception as es:
logger.error("卸载设备可用时间计算异常") logger.error("卸载设备可用时间计算异常")
logger.error(es) logger.error(es)
...@@ -810,32 +874,105 @@ class Dispatcher(DeviceMap): ...@@ -810,32 +874,105 @@ class Dispatcher(DeviceMap):
# 更新实际交通流 # 更新实际交通流
def update_actual_traffic_flow(self): def update_actual_traffic_flow(self):
loading_time = self.excavator.get_loading_time()
unloading_time = self.dump.get_unloading_time()
loading_task_time = self.excavator.get_loading_task_time()
unloading_task_time = self.dump.get_unloading_task_time()
truck_current_task = self.truck.get_truck_current_task() truck_current_task = self.truck.get_truck_current_task()
truck_current_trip = self.truck.get_truck_current_trip()
payload = self.truck.get_payload() payload = self.truck.get_payload()
for item in session_mysql.query(EquipmentPair).filter(EquipmentPair.createtime >= self.start_time).all(): dynamic_dump_num = self.dump.get_dump_num()
dump_index = self.dump_uuid_to_index_dict[item.dump_id] dynamic_excavator_num = self.excavator.get_excavator_num()
excavator_index = self.excavator_uuid_to_index_dict[item.exactor_id]
task = truck_current_task[item.truck_id] # for item in session_mysql.query(EquipmentPair).filter(EquipmentPair.createtime >= self.start_time).all():
# dump_index = self.dump_uuid_to_index_dict[item.dump_id]
# excavator_index = self.excavator_uuid_to_index_dict[item.exactor_id]
# task = truck_current_task[item.truck_id]
# if task in heavy_task_set:
# self.goto_dump_truck_num[dump_index][excavator_index] = \
# self.goto_dump_truck_num[dump_index][excavator_index] + 1
# self.actual_goto_dump_traffic_flow[dump_index][excavator_index] = \
# self.actual_goto_dump_traffic_flow[dump_index][excavator_index] + float(
# payload[self.truck_uuid_to_index_dict[item.truck_id]])
# if task in empty_task_set or task == -2:
# self.goto_excavator_truck_num[dump_index][excavator_index] = \
# self.goto_excavator_truck_num[dump_index][excavator_index] + 1
# print(item.truck_id)
# self.actual_goto_excavator_traffic_flow[dump_index][excavator_index] = \
# self.actual_goto_excavator_traffic_flow[dump_index][excavator_index] + float(
# payload[self.truck_uuid_to_index_dict[item.truck_id]])
self.goto_dump_truck_num = np.zeros((dynamic_excavator_num, dynamic_dump_num))
self.actual_goto_dump_traffic_flow = np.zeros((dynamic_excavator_num, dynamic_dump_num))
self.goto_excavator_truck_num = np.zeros((dynamic_dump_num, dynamic_excavator_num))
self.actual_goto_excavator_traffic_flow = np.zeros((dynamic_dump_num, dynamic_excavator_num))
try:
for i in range(dynamic_truck_num):
task = truck_current_task[self.truck_index_to_uuid_dict[i]]
end_area_index = truck_current_trip[i][1]
start_area_index = truck_current_trip[i][0]
# 若矿卡正常行驶,需要将该部分载重计入实时产量
if task in heavy_task_set: if task in heavy_task_set:
self.goto_dump_truck_num[dump_index][excavator_index] = \ self.goto_dump_truck_num[end_area_index][start_area_index] = \
self.goto_dump_truck_num[dump_index][excavator_index] + 1 self.goto_dump_truck_num[end_area_index][start_area_index] + 1
self.actual_goto_dump_traffic_flow[dump_index][excavator_index] = \ self.actual_goto_dump_traffic_flow[end_area_index][start_area_index] = \
self.actual_goto_dump_traffic_flow[dump_index][excavator_index] + float(payload[item.truck_id]) self.actual_goto_dump_traffic_flow[end_area_index][start_area_index] + float(
payload[i])
if task in empty_task_set: if task in empty_task_set:
self.goto_excavator_truck_num[dump_index][excavator_index] = \ self.goto_excavator_truck_num[start_area_index][end_area_index] = \
self.goto_excavator_truck_num[dump_index][excavator_index] + 1 self.goto_excavator_truck_num[start_area_index][end_area_index] + 1
self.actual_goto_excavator_traffic_flow[dump_index][excavator_index] = \ self.actual_goto_excavator_traffic_flow[start_area_index][end_area_index] = \
self.actual_goto_excavator_traffic_flow[dump_index][excavator_index] + float( self.actual_goto_excavator_traffic_flow[start_area_index][end_area_index] + float(
payload[item.truck_id]) payload[i])
# print(np.expand_dims(unloading_time,axis=0).repeat(dynamic_excavator_num, axis=0))
self.actual_goto_dump_traffic_flow = self.actual_goto_dump_traffic_flow / \ self.actual_goto_dump_traffic_flow = self.actual_goto_dump_traffic_flow / \
((datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, (self.distance_to_dump.reshape(dynamic_excavator_num, dynamic_dump_num) / (1000 * empty_speed) + \
seconds=0)) np.expand_dims(unloading_task_time,axis=0).repeat(dynamic_excavator_num, axis=0))
except Exception as es:
logger.error("更新不及时")
logger.error(es)
# print("驶往卸点实际载重")
# print(self.actual_goto_dump_traffic_flow)
# print("卸点路段行驶时间(h)")
# print((self.distance_to_dump.reshape(dynamic_excavator_num, dynamic_dump_num) / (1000 * empty_speed)))
# print("驶往卸点实际车流")
# print(self.actual_goto_dump_traffic_flow)
logger.info("驶往卸点实际载重")
logger.info(self.actual_goto_dump_traffic_flow)
logger.info("卸点路段行驶时间(h)")
logger.info((self.distance_to_dump.reshape(dynamic_excavator_num, dynamic_dump_num) / (1000 * empty_speed)))
logger.info("驶往卸点实际车流")
logger.info(self.actual_goto_dump_traffic_flow)
self.actual_goto_excavator_traffic_flow = self.actual_goto_excavator_traffic_flow / \ self.actual_goto_excavator_traffic_flow = self.actual_goto_excavator_traffic_flow / \
((datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, (self.distance_to_excavator.reshape(dynamic_excavator_num, dynamic_dump_num) / (1000 * heavy_speed) + \
seconds=0)) np.expand_dims(loading_task_time,axis=0).repeat(dynamic_dump_num, axis=0))
# print("驶往挖机实际载重")
# print(self.actual_goto_excavator_traffic_flow)
# print("挖机路段行驶时间(h)")
# print((self.distance_to_excavator.reshape(dynamic_excavator_num, dynamic_dump_num) / (1000 * heavy_speed)))
# print("驶往挖机实际车流")
# print(self.actual_goto_excavator_traffic_flow)
logger.info("驶往挖机实际载重")
logger.info(self.actual_goto_excavator_traffic_flow)
logger.info("挖机路段行驶时间(h)")
logger.info((self.distance_to_excavator.reshape(dynamic_excavator_num, dynamic_dump_num) / (1000 * heavy_speed)))
logger.info("驶往挖机实际车流")
logger.info(self.actual_goto_excavator_traffic_flow)
# 更新卸载设备预计产量 # 更新卸载设备预计产量
def update_pre_unload_throughout(self): def update_pre_unload_throughout(self):
...@@ -866,7 +1003,7 @@ class Dispatcher(DeviceMap): ...@@ -866,7 +1003,7 @@ class Dispatcher(DeviceMap):
try: try:
self.pre_excavator_real_mass = copy.deepcopy(self.excavator.get_excavator_actual_mass()) self.pre_excavator_real_mass = copy.deepcopy(self.excavator.get_excavator_actual_mass())
for i in range(self.truck.trucks): for i in range(self.truck.get_truck_num()):
# task = self.truck_current_stage[i][0] # task = self.truck_current_stage[i][0]
task = truck_current_task[self.truck_index_to_uuid_dict[i]] task = truck_current_task[self.truck_index_to_uuid_dict[i]]
end_area_index = self.truck.get_truck_current_trip()[i][1] end_area_index = self.truck.get_truck_current_trip()[i][1]
...@@ -884,7 +1021,10 @@ class Dispatcher(DeviceMap): ...@@ -884,7 +1021,10 @@ class Dispatcher(DeviceMap):
logger.info("#####################################周期更新开始#####################################") logger.info("#####################################周期更新开始#####################################")
self.load() # 装载周期参数
self.period_map_para_load()
self.period_walk_para_load()
# 更新卸载设备对象 # 更新卸载设备对象
self.dump.period_update() self.dump.period_update()
...@@ -895,8 +1035,8 @@ class Dispatcher(DeviceMap): ...@@ -895,8 +1035,8 @@ class Dispatcher(DeviceMap):
# 更新矿卡对象 # 更新矿卡对象
self.truck.period_update() self.truck.period_update()
# 更新距离参量 # # 更新距离参量
self.walker.update_walk_time() # self.walker.update_walk_time()
# # 更新设备距离(不同于工作区距离) # # 更新设备距离(不同于工作区距离)
# self.update_walk_time() # self.update_walk_time()
...@@ -950,9 +1090,16 @@ class Dispatcher(DeviceMap): ...@@ -950,9 +1090,16 @@ class Dispatcher(DeviceMap):
# 卸载设备卸载时间 # 卸载设备卸载时间
unloading_time = self.dump.get_unloading_time() unloading_time = self.dump.get_unloading_time()
# 路网信息 # 路网信息
park_to_load_eq = self.walker.get_park_to_load_eq() walk_time_park_to_excavator = walk_manage.get_walk_time_park_to_excavator()
go_time_eq = self.walker.get_go_time_eq() walk_time_to_dump = walk_manage.get_walk_time_to_dump()
com_time_eq = self.walker.get_com_time_eq() walk_time_to_excavator = walk_manage.get_walk_time_to_excavator()
# 出入场时间
loading_task_time = self.excavator.get_loading_task_time()
unloading_task_time = self.dump.get_unloading_task_time()
dynamic_dump_num = self.dump.get_dump_num()
dynamic_excavator_num = self.excavator.get_excavator_num()
now = float((datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, seconds=0)) now = float((datetime.now() - self.start_time) / timedelta(hours=0, minutes=1, seconds=0))
...@@ -964,83 +1111,139 @@ class Dispatcher(DeviceMap): ...@@ -964,83 +1111,139 @@ class Dispatcher(DeviceMap):
target = 0 target = 0
if task == -2: if task == -2:
try:
logger.info("矿卡状态:矿卡启动或故障恢复") logger.info("矿卡状态:矿卡启动或故障恢复")
logger.info("矿卡行程:无") logger.info("矿卡行程:无")
logger.info(f'涉及挖机:{list(self.excavator_uuid_to_index_dict.keys())}') logger.info(f'涉及挖机:{list(self.excavator_uuid_to_index_dict.keys())}')
logger.info(f'挖机饱和度:{(1 - self.sim_excavator_real_mass / excavator_target_mass)}') logger.info(f'挖机饱和度:{(1 - self.sim_excavator_real_mass / excavator_target_mass)}')
logger.info( logger.info(
f'行程时间:{(np.maximum(self.sim_excavator_ava_time, now + park_to_load_eq[0, :]) + loading_time - now)}') f'行程时间:{(np.maximum(self.sim_excavator_ava_time, now + walk_time_park_to_excavator[0, :]) + loading_time - now)}')
logger.info(f'行驶时间:{park_to_load_eq[0, :] + loading_time}') logger.info(f'行驶时间:{walk_time_park_to_excavator[0, :] + loading_time}')
except Exception as es:
logger.error(f'矿卡{truck_id}状态不匹配')
logger.error(es)
target = np.argmax(10 * (1 - self.sim_excavator_real_mass / excavator_target_mass) / target = np.argmax(10 * (1 - self.sim_excavator_real_mass / excavator_target_mass) /
(np.maximum(self.sim_excavator_ava_time, (np.maximum(self.sim_excavator_ava_time,
now + park_to_load_eq[0, :]) + loading_time now + walk_time_park_to_excavator[0, :]) + loading_task_time
- now)) - now))
# print("目的地: ", self.excavator_index_to_uuid_dict[target]) # target = np.argmin((walk_time_park_to_excavator[0, :] + loading_time))
logger.info(f'目的地:{self.excavator_index_to_uuid_dict[target]}') logger.info(f'目的地:{self.excavator_index_to_uuid_dict[target]}')
if task in empty_task_set: # print("目的地: ", self.excavator_index_to_uuid_dict[target])
if task in [0, 1, 2]:
try:
logger.info("矿卡状态:矿卡空载") logger.info("矿卡状态:矿卡空载")
logger.info(f'矿卡行程:{self.dump_index_to_uuid_dict[trip[0]]}-{self.excavator_index_to_uuid_dict[trip[1]]}') # logger.info(f'矿卡行程:{self.dump_index_to_uuid_dict[trip[0]]}-{self.excavator_index_to_uuid_dict[trip[1]]}')
logger.info(f'涉及卸载设备:{list(self.dump_uuid_to_index_dict.keys())}') logger.info(f'涉及卸载设备:{list(self.dump_uuid_to_index_dict.keys())}')
logger.info(f'卸载设备饱和度:{(1 - self.sim_dump_real_mass / dump_target_mass)}') # logger.info(f'卸载设备饱和度:{(1 - self.sim_dump_real_mass / dump_target_mass)}')
logger.info( # logger.info(
f'行程时间:{(np.maximum(self.sim_dump_ava_time, self.sim_truck_ava_time[truck_index] + go_time_eq[:, trip[1]]) + unloading_time - self.sim_truck_ava_time[truck_index])}') # f'行程时间:{(np.maximum(self.sim_dump_ava_time, self.sim_truck_ava_time[truck_index] + walk_time_to_dump[:, trip[1]]) + unloading_time - self.sim_truck_ava_time[truck_index])}')
logger.info(f'行驶时间:{go_time_eq[:, trip[1]] + unloading_time}') # logger.info(f'行驶时间:{walk_time_to_dump[:, trip[1]] + unloading_time}')
except Exception as es:
logger.error(f'矿卡{truck_id}状态不匹配')
logger.error(es)
# # 卡车空载,计算下一次卸载设备 # # 卡车空载,计算下一次卸载设备
# target = np.argmax(10 * (1 - self.sim_dump_real_mass / dump_target_mass) / # target = np.argmax(10 * (1 - self.sim_dump_real_mass / dump_target_mass) /
# (np.maximum(self.sim_dump_ava_time, # (np.maximum(self.sim_dump_ava_time,
# # self.sim_truck_reach_excavator[truck_index] + self.loading_time[trip[1]] # # self.sim_truck_reach_excavator[truck_index] + self.loading_time[trip[1]]
# self.sim_truck_ava_time[truck_index] # self.sim_truck_ava_time[truck_index]
# + go_time_eq[:, trip[1]]) + unloading_time # + walk_time_to_dump[:, trip[1]]) + unloading_time
# - self.sim_truck_ava_time[truck_index])) # - self.sim_truck_ava_time[truck_index]))
try: try:
assert self.actual_goto_dump_traffic_flow.shape == (self.excavators, self.dumps) assert np.array(self.actual_goto_dump_traffic_flow).shape == (dynamic_excavator_num, dynamic_dump_num)
assert self.opt_goto_dump_traffic_flow.shape == (self.excavators, self.dumps) assert np.array(self.opt_goto_dump_traffic_flow).shape == (dynamic_excavator_num, dynamic_dump_num)
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
self.actual_goto_dump_traffic_flow = \ self.actual_goto_dump_traffic_flow = \
np.array(self.actual_goto_dump_traffic_flow).reshape((self.excavators, self.dumps)) np.array(self.actual_goto_dump_traffic_flow).reshape((dynamic_excavator_num, dynamic_dump_num))
self.opt_goto_dump_traffic_flow = \ self.opt_goto_dump_traffic_flow = \
np.array(self.opt_goto_dump_traffic_flow).reshape((self.excavators, self.dumps)) np.array(self.opt_goto_dump_traffic_flow).reshape((dynamic_excavator_num, dynamic_dump_num))
self.actual_goto_dump_traffic_flow = np.array(self.actual_goto_dump_traffic_flow)
self.opt_goto_dump_traffic_flow = np.array(self.opt_goto_dump_traffic_flow)
logger.info('挖机id:')
logger.info(self.excavator_uuid_to_index_dict)
logger.info('卸点id:')
logger.info(self.dump_uuid_to_index_dict)
logger.info(f'卸载点实际车流:')
logger.info(self.actual_goto_dump_traffic_flow)
logger.info(f'卸载点理想车流:')
logger.info(self.opt_goto_dump_traffic_flow)
logger.info("卸载点实际车流")
logger.info(self.actual_goto_dump_traffic_flow[int(trip[1]), :])
logger.info("卸载点理想车流")
logger.info(self.opt_goto_dump_traffic_flow[int(trip[1]), :])
target = np.argmin( target = np.argmin(
self.actual_goto_dump_traffic_flow[int(trip[1]), :] / self.opt_goto_dump_traffic_flow[int(trip[1]), :]) (self.actual_goto_dump_traffic_flow[int(trip[1]), :] + 0.001) / (self.opt_goto_dump_traffic_flow[int(trip[1]), :] + 0.001))
logger.info("车流比:")
logger.info((self.actual_goto_dump_traffic_flow[int(trip[1]), :] + 0.001) / (self.opt_goto_dump_traffic_flow[int(trip[1]), :] + 0.001))
logger.info(f'目的地:{self.dump_index_to_uuid_dict[target]}') logger.info(f'目的地:{self.dump_index_to_uuid_dict[target]}')
elif task in heavy_task_set: elif task in [3, 4, 5]:
try:
logger.info("矿卡状态:矿卡重载") logger.info("矿卡状态:矿卡重载")
logger.info(f'矿卡行程:{self.excavator_index_to_uuid_dict[trip[0]]}-{self.dump_index_to_uuid_dict[trip[1]]}') # logger.info(f'矿卡行程:{self.excavator_index_to_uuid_dict[trip[0]]}-{self.dump_index_to_uuid_dict[trip[1]]}')
logger.info(f'涉及卸载设备:{list(self.excavator_uuid_to_index_dict.keys())}') logger.info(f'涉及挖机设备:{list(self.excavator_uuid_to_index_dict.keys())}')
logger.info(f'卸载设备饱和度:{(1 - self.sim_excavator_real_mass / excavator_target_mass)}') # logger.info(f'卸载设备饱和度:{(1 - self.sim_excavator_real_mass / excavator_target_mass)}')
logger.info( # logger.info(
f'行程时间:{(np.maximum(self.sim_excavator_ava_time, self.sim_truck_ava_time[truck_index] + com_time_eq[trip[1], :]) + loading_time - self.sim_truck_ava_time[truck_index])}') # f'行程时间:{(np.maximum(self.sim_excavator_ava_time, self.sim_truck_ava_time[truck_index] + walk_time_to_excavator[trip[1], :]) + loading_time - self.sim_truck_ava_time[truck_index])}')
logger.info(f'行驶时间:{com_time_eq[trip[1], :] + loading_time}') # logger.info(f'行驶时间:{walk_time_to_excavator[trip[1], :] + loading_time}')
except Exception as es:
logger.error(f'矿卡{truck_id}状态不匹配')
logger.error(es)
# 卡车重载,计算下一次装载点 # # 卡车重载,计算下一次装载点
target = np.argmax(10 * (1 - self.sim_excavator_real_mass / excavator_target_mass) / # target = np.argmax(10 * (1 - self.sim_excavator_real_mass / excavator_target_mass) /
(np.maximum(self.sim_excavator_ava_time, # (np.maximum(self.sim_excavator_ava_time,
self.sim_truck_ava_time[truck_index] # self.sim_truck_ava_time[truck_index]
+ com_time_eq[trip[1], :]) + loading_time # + walk_time_to_excavator[trip[1], :]) + loading_time
- self.sim_truck_ava_time[truck_index])) # - self.sim_truck_ava_time[truck_index]))
# try: try:
# assert self.actual_goto_excavator_traffic_flow.shape == (self.excavators, self.dumps) assert np.array(self.actual_goto_excavator_traffic_flow).shape == (dynamic_excavator_num, dynamic_dump_num)
# assert self.opt_goto_excavator_traffic_flow.shape == (self.excavators, self.dumps) assert np.array(self.opt_goto_excavator_traffic_flow).shape == (dynamic_excavator_num, dynamic_dump_num)
# except Exception as es: except Exception as es:
# logger.warning(es) logger.warning(es)
# self.actual_goto_excavator_traffic_flow = \ self.actual_goto_excavator_traffic_flow = \
# np.array(self.actual_goto_excavator_traffic_flow).reshape((self.dumps, self.excavators)) np.array(self.actual_goto_excavator_traffic_flow).reshape((dynamic_dump_num, dynamic_excavator_num))
# self.opt_goto_excavator_traffic_flow = \ self.opt_goto_excavator_traffic_flow = \
# np.array(self.opt_goto_excavator_traffic_flow).reshape((self.dumps, self.excavators)) np.array(self.opt_goto_excavator_traffic_flow).reshape((dynamic_dump_num, dynamic_excavator_num))
#
# target = np.argmin( # 不知道为什么,偶尔变成了list
# self.actual_goto_excavator_traffic_flow[trip[1], :] / self.opt_goto_excavator_traffic_flow[trip[1], :]) self.actual_goto_excavator_traffic_flow = np.array(self.actual_goto_excavator_traffic_flow)
self.opt_goto_excavator_traffic_flow = np.array(self.opt_goto_excavator_traffic_flow)
logger.info('挖机id:')
logger.info(self.excavator_uuid_to_index_dict)
logger.info('卸点id:')
logger.info(self.dump_uuid_to_index_dict)
logger.info(f'挖机实际车流:')
logger.info(self.actual_goto_excavator_traffic_flow)
logger.info(f'挖机理想车流:')
logger.info(self.opt_goto_excavator_traffic_flow)
logger.info("挖机实际车流")
logger.info(self.actual_goto_excavator_traffic_flow[trip[1], :])
logger.info("挖机理想车流")
logger.info(self.opt_goto_excavator_traffic_flow[trip[1], :])
target = np.argmin(
(self.actual_goto_excavator_traffic_flow[trip[1], :] + 0.001) / (self.opt_goto_excavator_traffic_flow[trip[1], :] + 0.001))
logger.info("车流比:")
logger.info((self.actual_goto_excavator_traffic_flow[trip[1], :] + 0.001) / (self.opt_goto_excavator_traffic_flow[trip[1], :] + 0.001))
logger.info(f'目的地:{self.excavator_index_to_uuid_dict[target]}') logger.info(f'目的地:{self.excavator_index_to_uuid_dict[target]}')
...@@ -1048,6 +1251,8 @@ class Dispatcher(DeviceMap): ...@@ -1048,6 +1251,8 @@ class Dispatcher(DeviceMap):
def schedule_construct(self): def schedule_construct(self):
try:
# 读取所需信息 # 读取所需信息
trucks = self.truck.get_truck_num() trucks = self.truck.get_truck_num()
truck_current_trip = self.truck.get_truck_current_trip() truck_current_trip = self.truck.get_truck_current_trip()
...@@ -1055,8 +1260,13 @@ class Dispatcher(DeviceMap): ...@@ -1055,8 +1260,13 @@ class Dispatcher(DeviceMap):
payload = self.truck.get_payload() payload = self.truck.get_payload()
unloading_time = self.dump.get_unloading_time() unloading_time = self.dump.get_unloading_time()
loading_time = self.excavator.get_loading_time() loading_time = self.excavator.get_loading_time()
go_time_area = self.walker.get_go_time_area()
com_time_area = self.walker.get_com_time_area() # 出入场时间
loading_task_time = self.excavator.get_loading_task_time()
unloading_task_time = self.dump.get_unloading_task_time()
walk_time_to_unload_area = walk_manage.get_walk_time_to_unload_area()
walk_time_to_load_area = walk_manage.get_walk_time_to_load_area()
# Seq初始化 # Seq初始化
Seq = [[truck_current_trip[i][1], -1] for i in range(trucks)] Seq = [[truck_current_trip[i][1], -1] for i in range(trucks)]
...@@ -1077,7 +1287,7 @@ class Dispatcher(DeviceMap): ...@@ -1077,7 +1287,7 @@ class Dispatcher(DeviceMap):
for truck in index: for truck in index:
if len(Seq[truck]) > 0: if len(Seq[truck]) > 0:
try: # try:
task = truck_current_task[self.truck_index_to_uuid_dict[truck]] task = truck_current_task[self.truck_index_to_uuid_dict[truck]]
# 矿卡结束当前派车计划后的目的地 # 矿卡结束当前派车计划后的目的地
...@@ -1089,9 +1299,9 @@ class Dispatcher(DeviceMap): ...@@ -1089,9 +1299,9 @@ class Dispatcher(DeviceMap):
# 写入Seq序列 # 写入Seq序列
Seq[truck][1] = target_eq_index Seq[truck][1] = target_eq_index
except Exception as es: # except Exception as es:
logger.error(f'矿卡 {truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[truck]]} 派车计划计算异常') # logger.error(f'矿卡 {truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[truck]]} 派车计划计算异常')
logger.error(es) # logger.error(es)
try: try:
...@@ -1106,9 +1316,9 @@ class Dispatcher(DeviceMap): ...@@ -1106,9 +1316,9 @@ class Dispatcher(DeviceMap):
max( max(
self.sim_dump_ava_time[target_eq_index], self.sim_dump_ava_time[target_eq_index],
self.sim_truck_ava_time[truck] self.sim_truck_ava_time[truck]
+ go_time_area[target_area_index][end_area_index], + walk_time_to_unload_area[target_area_index][end_area_index],
) )
+ unloading_time[target_eq_index] + unloading_task_time[target_eq_index]
) )
elif task in heavy_task_set: elif task in heavy_task_set:
target_area_index = self.excavator_index_to_load_area_index_dict[target_eq_index] target_area_index = self.excavator_index_to_load_area_index_dict[target_eq_index]
...@@ -1121,9 +1331,9 @@ class Dispatcher(DeviceMap): ...@@ -1121,9 +1331,9 @@ class Dispatcher(DeviceMap):
max( max(
self.sim_excavator_ava_time[target_eq_index], self.sim_excavator_ava_time[target_eq_index],
self.sim_truck_ava_time[truck] self.sim_truck_ava_time[truck]
+ go_time_area[end_area_index][target_area_index], + walk_time_to_unload_area[end_area_index][target_area_index],
) )
+ loading_time[target_eq_index] + loading_task_time[target_eq_index]
) )
else: else:
pass pass
...@@ -1181,15 +1391,24 @@ class Dispatcher(DeviceMap): ...@@ -1181,15 +1391,24 @@ class Dispatcher(DeviceMap):
for i in range(trucks): for i in range(trucks):
print("dispatch_setting:") print("dispatch_setting:")
print(redis5.get(self.truck_index_to_uuid_dict[i])) print(redis5.get(self.truck_index_to_uuid_dict[i]))
except Exception as es:
logger.error("更新不及时")
logger.error(es)
logger.info("#####################################周期更新结束#####################################") logger.info("#####################################周期更新结束#####################################")
return Seq return Seq
# 下面三个函数保证程序定期执行,不用管他 # 下面三个函数保证程序定期执行,不用管他
def process(dispatcher): def process(dispatcher):
# 更新周期参数
period_para_update()
# 清空数据库缓存 # 清空数据库缓存
session_mysql.commit() session_mysql.commit()
session_mysql.flush() session_mysql.flush()
...@@ -1200,9 +1419,15 @@ def process(dispatcher): ...@@ -1200,9 +1419,15 @@ def process(dispatcher):
# 参数重置 # 参数重置
dispatcher.sim_para_reset() dispatcher.sim_para_reset()
try:
# 调度计算 # 调度计算
dispatcher.schedule_construct() dispatcher.schedule_construct()
except Exception as es:
logger.error("更新不及时")
logger.error(es)
scheduler = sched.scheduler(time.time, time.sleep) scheduler = sched.scheduler(time.time, time.sleep)
...@@ -1223,4 +1448,4 @@ if __name__ == "__main__": ...@@ -1223,4 +1448,4 @@ if __name__ == "__main__":
dispatcher = Dispatcher() dispatcher = Dispatcher()
main(60, dispatcher) main(10, dispatcher)
...@@ -11,6 +11,15 @@ ...@@ -11,6 +11,15 @@
from tables import * from tables import *
from urllib.parse import quote from urllib.parse import quote
import logging.handlers import logging.handlers
from redis import StrictRedis, ConnectionPool
import numpy as np
from redis import StrictRedis, ConnectionPool
import redis
from datetime import datetime, timedelta
import copy
import json
import sched
import time
# 创建日志 # 创建日志
######################################################################################################################## ########################################################################################################################
...@@ -31,7 +40,7 @@ logger.setLevel(logging.INFO) ...@@ -31,7 +40,7 @@ logger.setLevel(logging.INFO)
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60) # timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
# filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=3*1024*1024, backupCount=10) # filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=3*1024*1024, backupCount=10)
filehandler = logging.handlers.RotatingFileHandler("./RDlogs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10) filehandler = logging.handlers.RotatingFileHandler("./TFlog/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10)
# 设置后缀名称,跟strftime的格式一样 # 设置后缀名称,跟strftime的格式一样
filehandler.suffix = "%Y-%m-%d_%H-%M.log" filehandler.suffix = "%Y-%m-%d_%H-%M.log"
......
...@@ -159,8 +159,14 @@ def update_total_truck(): ...@@ -159,8 +159,14 @@ def update_total_truck():
query = np.array(session_mysql.query(Equipment).filter_by(device_type=1, isdeleted=0).all()) query = np.array(session_mysql.query(Equipment).filter_by(device_type=1, isdeleted=0).all())
for item in query: for item in query:
json_value = json.loads(redis2.get(item.equipment_id))
is_online = json_value.get('isOnline')
if is_online:
truck_list.append(item.id) truck_list.append(item.id)
# for item in query:
# truck_list.append(item.id)
if len(truck_list) < 1: if len(truck_list) < 1:
raise Exception("无矿卡设备可用-矿卡集合读取异常") raise Exception("无矿卡设备可用-矿卡集合读取异常")
except Exception as es: except Exception as es:
......
...@@ -14,27 +14,19 @@ from sqlalchemy import Column, create_engine ...@@ -14,27 +14,19 @@ from sqlalchemy import Column, create_engine
from sqlalchemy import VARCHAR, DateTime, Float, Integer, BOOLEAN from sqlalchemy import VARCHAR, DateTime, Float, Integer, BOOLEAN
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
import numpy as np # import numpy as np
from redis import StrictRedis, ConnectionPool # from redis import StrictRedis, ConnectionPool
import redis # import redis
from datetime import datetime, timedelta # from datetime import datetime, timedelta
import copy # import copy
import json # import json
import sched # import sched
import time # import time
pool5 = ConnectionPool(host='192.168.28.111', db=5, port=6379, password='Huituo@123')
redis5 = StrictRedis(connection_pool=pool5)
pool2 = ConnectionPool(host='192.168.28.111', db=2, port=6379, password='Huituo@123')
redis2 = StrictRedis(connection_pool=pool2)
# 创建对象的基类: # 创建对象的基类:
Base = declarative_base() Base = declarative_base()
# 初始化数据库连接: # 初始化数据库连接:
engine_mysql = create_engine('mysql+mysqlconnector://root:Huituo@123@192.168.28.111:3306/waytous') engine_mysql = create_engine('mysql+mysqlconnector://root:Huituo@123@192.168.28.111:3306/waytous')
...@@ -350,3 +342,21 @@ class JobRecord(Base): ...@@ -350,3 +342,21 @@ class JobRecord(Base):
self.start_time = start_time self.start_time = start_time
self.end_time = end_time self.end_time = end_time
self.work_type = work_type self.work_type = work_type
class WrokRecord(Base):
__tablename__ = 'statistic_work_record'
equipment_id = Column(VARCHAR(50), primary_key=True)
work_day = Column(DateTime, primary_key=True)
load_entrance_time = Column(Float)
load_entrance_count = Column(Integer)
load_exit_time = Column(DateTime)
load_exit_count = Column(Integer)
def __init__(self, equipment_id, work_day, load_entrance_time, load_entrance_count, load_exit_time, load_exit_count):
self.equipment_id = equipment_id
self.work_day = work_day
self.load_entrance_time = load_entrance_time
self.load_entrance_count = load_entrance_count
self.load_exit_time = load_exit_time
self.load_exit_count = load_exit_count
\ No newline at end of file
...@@ -11,39 +11,40 @@ ...@@ -11,39 +11,40 @@
from static_data_process import * from static_data_process import *
from settings import * from settings import *
from path_plan.path_plannner import * from path_plan.path_plannner import *
from para_config import *
# 车流规划类 # 车流规划类
class Traffic_para(object): class Traffic_para(WalkManage):
def __init__(self, num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump): def __init__(self, num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump):
self.load_area_uuid_to_index_dict = {} # 用于保存装载点uuid到id的映射 # self.load_area_uuid_to_index_dict = {} # 用于保存装载点uuid到id的映射
self.load_area_index_to_uuid_dict = {} # 用于保存装载点id到uuid的映射 # self.load_area_index_to_uuid_dict = {} # 用于保存装载点id到uuid的映射
self.unload_area_uuid_to_index_dict = {} # 用于保存卸载点uuid到id的映射 # self.unload_area_uuid_to_index_dict = {} # 用于保存卸载点uuid到id的映射
self.unload_area_index_to_uuid_dict = {} # 用于保存卸载点id到uuid的映射 # self.unload_area_index_to_uuid_dict = {} # 用于保存卸载点id到uuid的映射
#
self.excavator_uuid_to_index_dict = {} # 用于保存挖机uuid到id的映射 # self.excavator_uuid_to_index_dict = {} # 用于保存挖机uuid到id的映射
self.excavator_index_to_uuid_dict = {} # 用于保存挖机id到uuid的映射 # self.excavator_index_to_uuid_dict = {} # 用于保存挖机id到uuid的映射
self.dump_uuid_to_index_dict = {} # 用于保存卸点uuid到id的映射 # self.dump_uuid_to_index_dict = {} # 用于保存卸点uuid到id的映射
self.dump_index_to_uuid_dict = {} # 用于保存卸点id到uuid的映射 # self.dump_index_to_uuid_dict = {} # 用于保存卸点id到uuid的映射
#
self.dump_uuid_to_unload_area_uuid_dict = {} # 用于保存卸点与卸载区的绑定关系(uuid) # self.dump_uuid_to_unload_area_uuid_dict = {} # 用于保存卸点与卸载区的绑定关系(uuid)
self.excavator_uuid_to_load_area_uuid_dict = {} # 用于保存挖机与装载区的绑定关系(uuid) # self.excavator_uuid_to_load_area_uuid_dict = {} # 用于保存挖机与装载区的绑定关系(uuid)
self.dump_index_to_unload_area_index_dict = {} # 用于保存卸点与卸载区的绑定关系(id) # self.dump_index_to_unload_area_index_dict = {} # 用于保存卸点与卸载区的绑定关系(id)
self.excavator_index_to_load_area_index_dict = {} # 用于保存挖机与装载区的绑定关系(id) # self.excavator_index_to_load_area_index_dict = {} # 用于保存挖机与装载区的绑定关系(id)
self.empty_speed = 25 # 空载矿卡平均时速 self.empty_speed = 25 # 空载矿卡平均时速
self.heavy_speed = 22 # 重载矿卡平均时速 self.heavy_speed = 22 # 重载矿卡平均时速
self.goto_load_area_distance = np.zeros((num_of_unload_area, num_of_load_area)) # 空载运输路线距离 self.walk_time_to_load_area = np.zeros((num_of_unload_area, num_of_load_area)) # 空载运输路线距离
self.goto_unload_area_distance = np.zeros((num_of_load_area, num_of_unload_area)) # 重载运输路线距离 self.walk_time_to_unload_area = np.zeros((num_of_load_area, num_of_unload_area)) # 重载运输路线距离
# self.avg_goto_excavator_weight = np.zeros((num_of_load_area, num_of_unload_area)) # self.avg_goto_excavator_weight = np.zeros((num_of_load_area, num_of_unload_area))
self.avg_goto_excavator_weight = np.full((num_of_unload_area, num_of_load_area), 1) self.avg_goto_excavator_weight = np.full((num_of_unload_area, num_of_load_area), 1)
# self.avg_goto_dump_weight = np.zeros((num_of_load_area, num_of_unload_area)) # self.avg_goto_dump_weight = np.zeros((num_of_load_area, num_of_unload_area))
self.avg_goto_dump_weight = np.full((num_of_load_area, num_of_unload_area), 1) self.avg_goto_dump_weight = np.full((num_of_load_area, num_of_unload_area), 1)
self.goto_excavator_distance = np.zeros((num_of_dump, num_of_excavator)) # 逻辑空载运输路线距离 self.walk_time_to_excavator = np.zeros((num_of_dump, num_of_excavator)) # 逻辑空载运输路线距离
self.goto_dump_distance = np.zeros((num_of_excavator, num_of_dump)) # 逻辑重载运输路线距离 self.walk_time_to_dump = np.zeros((num_of_excavator, num_of_dump)) # 逻辑重载运输路线距离
self.payload = 100 # 有效载重(不同型号矿卡载重不同,这里暂时认为车队是同质的) self.payload = 20 # 有效载重(不同型号矿卡载重不同,这里暂时认为车队是同质的)
self.min_throughout = 200 # 最小产量约束 self.min_throughout = 200 # 最小产量约束
self.truck_total_num = 0 self.truck_total_num = 0
...@@ -69,118 +70,164 @@ class Traffic_para(object): ...@@ -69,118 +70,164 @@ class Traffic_para(object):
self.grade_lower_dump_array = np.zeros(num_of_dump) # 卸载点矿石品位下限 self.grade_lower_dump_array = np.zeros(num_of_dump) # 卸载点矿石品位下限
self.grade_upper_dump_array = np.zeros(num_of_dump) # 卸载点矿石品位上限 self.grade_upper_dump_array = np.zeros(num_of_dump) # 卸载点矿石品位上限
# 提取卸载点信息并建立映射 # # 提取卸载点信息并建立映射
# def extract_dump_info(self):
# dump_index = 0
# for dispatch in session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all():
# unload_area_id = dispatch.unload_area_id
# dump_id = dispatch.dump_id
# if dump_id not in self.dump_uuid_to_unload_area_uuid_dict:
# # dump_uuid <-> dump_id
# self.dump_uuid_to_index_dict[dump_id] = dump_index
# self.dump_index_to_uuid_dict[dump_index] = dump_id
# # dump_uuid -> unload_area_uuid
# self.dump_uuid_to_unload_area_uuid_dict[dump_id] = unload_area_id
# # dump_id -> unload_area_id
# self.dump_index_to_unload_area_index_dict[
# self.dump_uuid_to_index_dict[dump_id]] = \
# unload_area_uuid_to_index_dict[unload_area_id]
#
# self.dump_strength[dump_index] = 300 # 卸载设备最大卸载能力,单位吨/小时
# self.grade_upper_dump_array[dump_index] = 100 # 卸点品位上限
# self.grade_lower_dump_array[dump_index] = 100 # 卸点品位下限
# self.dump_priority_coefficient[dump_index] = 1 # 卸载设备优先级
# dump_index += 1
# 设置卸载点信息
def extract_dump_info(self): def extract_dump_info(self):
dump_index = 0 try:
for dispatch in session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all(): for dump_index in range(dynamic_excavator_num):
unload_area_id = dispatch.unload_area_id
dump_id = dispatch.dump_id self.dump_strength[dump_index] = 10000 # 卸载设备最大卸载能力,单位吨/小时
if dump_id not in self.dump_uuid_to_unload_area_uuid_dict:
# dump_uuid <-> dump_id
self.dump_uuid_to_index_dict[dump_id] = dump_index
self.dump_index_to_uuid_dict[dump_index] = dump_id
# dump_uuid -> unload_area_uuid
self.dump_uuid_to_unload_area_uuid_dict[dump_id] = unload_area_id
# dump_id -> unload_area_id
self.dump_index_to_unload_area_index_dict[
self.dump_uuid_to_index_dict[dump_id]] = \
self.unload_area_uuid_to_index_dict[unload_area_id]
self.dump_strength[dump_index] = 300 # 卸载设备最大卸载能力,单位吨/小时
self.grade_upper_dump_array[dump_index] = 100 # 卸点品位上限 self.grade_upper_dump_array[dump_index] = 100 # 卸点品位上限
self.grade_lower_dump_array[dump_index] = 100 # 卸点品位下限 self.grade_lower_dump_array[dump_index] = 100 # 卸点品位下限
self.dump_priority_coefficient[dump_index] = 1 # 卸载设备优先级 self.dump_priority_coefficient[dump_index] = 1 # 卸载设备优先级
dump_index += 1 except Exception as es:
logger.error(es)
logger.error("卸载点信息设置异常")
# 提取挖机信息并建立映射
# # 提取挖机信息并建立映射
# def extract_excavator_info(self):
# try:
# excavator_index = 0
# for dispatch in session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all():
# excavator_id = dispatch.exactor_id
# load_area_id = dispatch.load_area_id
# if excavator_id not in self.excavator_uuid_to_index_dict:
# # excavator_uuid <-> excavator_uuid
# self.excavator_uuid_to_index_dict[excavator_id] = excavator_index
# self.excavator_index_to_uuid_dict[excavator_index] = excavator_id
# # excavator_uuid -> load_area_uuid
# self.excavator_uuid_to_load_area_uuid_dict[excavator_id] = load_area_id
# # excavator_id -> load_area_id
# self.excavator_index_to_load_area_index_dict[
# self.excavator_uuid_to_index_dict[excavator_id]] = \
# load_area_uuid_to_index_dict[load_area_id]
#
# self.excavator_strength[excavator_index] = 300 # 挖机最大装载能力,单位吨/小时
# self.grade_loading_array[excavator_index] = 100 # 挖机装载物料品位
# self.excavator_priority_coefficient[excavator_index] = 1 # 挖机优先级
# excavator_index += 1
# except Exception as es:
# logger.error("车流规划读取挖机信息异常")
# 设置挖信息
def extract_excavator_info(self): def extract_excavator_info(self):
try: try:
excavator_index = 0 for excavator_index in range(len(self.excavator_index_to_uuid_dict)):
for dispatch in session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all(): self.excavator_strength[excavator_index] = 1000 # 挖机最大装载能力,单位吨/小时
excavator_id = dispatch.exactor_id
load_area_id = dispatch.load_area_id
if excavator_id not in self.excavator_uuid_to_index_dict:
# excavator_uuid <-> excavator_uuid
self.excavator_uuid_to_index_dict[excavator_id] = excavator_index
self.excavator_index_to_uuid_dict[excavator_index] = excavator_id
# excavator_uuid -> load_area_uuid
self.excavator_uuid_to_load_area_uuid_dict[excavator_id] = load_area_id
# excavator_id -> load_area_id
self.excavator_index_to_load_area_index_dict[
self.excavator_uuid_to_index_dict[excavator_id]] = \
self.load_area_uuid_to_index_dict[load_area_id]
self.excavator_strength[excavator_index] = 300 # 挖机最大装载能力,单位吨/小时
self.grade_loading_array[excavator_index] = 100 # 挖机装载物料品位 self.grade_loading_array[excavator_index] = 100 # 挖机装载物料品位
self.excavator_priority_coefficient[excavator_index] = 1 # 挖机优先级 self.excavator_priority_coefficient[excavator_index] = 1 # 挖机优先级
excavator_index += 1
except Exception as es: except Exception as es:
logger.error("车流规划读取挖机信息异常") logger.error(es)
logger.error("挖机信息设置异常")
# def extract_walk_time_info(self):
# # load_area_uuid <-> load_area_id
# # unload_area_uuid <-> unload_area_id
# load_area_index = 0
# unload_area_index = 0
# for walk_time in session_postgre.query(WalkTime).all():
#
# load_area_id = str(walk_time.load_area_id)
# unload_area_id = str(walk_time.unload_area_id)
#
# if load_area_id not in load_area_uuid_to_index_dict:
# load_area_uuid_to_index_dict[load_area_id] = load_area_index
# load_area_index_to_uuid_dict[load_area_index] = load_area_id
# load_area_index += 1
# if unload_area_id not in unload_area_uuid_to_index_dict:
# unload_area_uuid_to_index_dict[unload_area_id] = unload_area_index
# unload_area_index_to_uuid_dict[unload_area_index] = unload_area_id
# unload_area_index += 1
def extract_walk_time_info(self): def extract_walk_time_info(self):
# load_area_uuid <-> load_area_id try:
# unload_area_uuid <-> unload_area_id # 车流规划部分矩阵格式与其余两个模块不同
load_area_index = 0 cost_to_load_area = self.path_planner.cost_to_load_area
unload_area_index = 0 cost_to_unload_area = self.path_planner.cost_to_unload_area
for walk_time in session_postgre.query(WalkTime).all():
distance_to_load_area = self.path_planner.distance_to_load_area
load_area_id = str(walk_time.load_area_id) distance_to_unload_area = self.path_planner.distance_to_unload_area
unload_area_id = str(walk_time.unload_area_id)
if load_area_id not in self.load_area_uuid_to_index_dict:
self.load_area_uuid_to_index_dict[load_area_id] = load_area_index
self.load_area_index_to_uuid_dict[load_area_index] = load_area_id
load_area_index += 1
if unload_area_id not in self.unload_area_uuid_to_index_dict:
self.unload_area_uuid_to_index_dict[unload_area_id] = unload_area_index
self.unload_area_index_to_uuid_dict[unload_area_index] = unload_area_id
unload_area_index += 1
# 路网信息读取 # 路网信息读取
for walk_time in session_postgre.query(WalkTime).all(): for unload_area_index in range(unload_area_num):
load_area_id = str(walk_time.load_area_id) for load_area_index in range(load_area_num):
unload_area_id = str(walk_time.unload_area_id)
# 将uuid转为id
load_area_index = self.load_area_uuid_to_index_dict[load_area_id]
unload_area_index = self.unload_area_uuid_to_index_dict[unload_area_id]
# 运输路线距离
self.goto_load_area_distance[unload_area_index][load_area_index] = walk_time.to_load_distance
self.goto_unload_area_distance[load_area_index][unload_area_index] = walk_time.to_unload_distance
# 卸载道路上,每运输1吨货物需要一辆卡车运行时长,等于(该卸载道路上车辆平均运行时长/卡车平均实际装载量)
# 单位为辆小时/吨
# i代表第i个电铲,j代表第j个卸载点
# walktime_goto_dump单位是秒,需要除以3600,转成小时
self.goto_load_area_factor[unload_area_index][load_area_index] = \ self.goto_load_area_factor[unload_area_index][load_area_index] = \
(60 / 1000 * walk_time.to_load_distance / self.empty_speed) / self.payload (cost_to_load_area[unload_area_index][load_area_index] / (empty_speed * 1000)) / self.payload
# / self.avg_goto_excavator_weight[load_area_index][unload_area_index]
# 装载道路上,每提供1吨的装载能力需要一辆卡车运行时长,等于(该装载道路上车辆平均运行时长/卡车平均装载能力)
# 单位为辆小时/吨
# i代表第i个卸载点,j代表第j个电铲
# walktime_goto_excavator单位是秒,需要除以3600,转成小时
self.goto_unload_area_factor[load_area_index][unload_area_index] = \ self.goto_unload_area_factor[load_area_index][unload_area_index] = \
(60 / 1000 * walk_time.to_unload_distance / self.heavy_speed) / self.payload (cost_to_unload_area[unload_area_index][load_area_index] / (heavy_speed * 1000)) / self.payload
# / self.avg_goto_excavator_weight[unload_area_index][load_area_index] except Exception as es:
logger.error(es)
# 车流规划部分矩阵格式与其余两个模块不同 logger.error("车流规划信息计算异常")
self.goto_load_area_distance = self.path_planner.walk_time_to_load_area
self.goto_unload_area_distance = self.path_planner.walk_time_to_unload_area.transpose() # for walk_time in session_postgre.query(WalkTime).all():
# load_area_id = str(walk_time.load_area_id)
# unload_area_id = str(walk_time.unload_area_id)
# # 将uuid转为id
# load_area_index = load_area_uuid_to_index_dict[load_area_id]
# unload_area_index = unload_area_uuid_to_index_dict[unload_area_id]
#
# # # 运输路线距离
# # self.walk_time_to_load_area[unload_area_index][load_area_index] = walk_time.to_load_distance
# # self.walk_time_to_unload_area[load_area_index][unload_area_index] = walk_time.to_unload_distance
#
# # 卸载道路上,每运输1吨货物需要一辆卡车运行时长,等于(该卸载道路上车辆平均运行时长/卡车平均实际装载量)
# # 单位为辆小时/吨
# # i代表第i个电铲,j代表第j个卸载点
# # walktime_goto_dump单位是秒,需要除以3600,转成小时
# self.goto_load_area_factor[unload_area_index][load_area_index] = \
# (60 / 1000 * walk_time.to_load_distance / self.empty_speed) / self.payload
# # / self.avg_goto_excavator_weight[load_area_index][unload_area_index]
#
# # 装载道路上,每提供1吨的装载能力需要一辆卡车运行时长,等于(该装载道路上车辆平均运行时长/卡车平均装载能力)
# # 单位为辆小时/吨
# # i代表第i个卸载点,j代表第j个电铲
# # walktime_goto_excavator单位是秒,需要除以3600,转成小时
# self.goto_unload_area_factor[load_area_index][unload_area_index] = \
# (60 / 1000 * walk_time.to_unload_distance / self.heavy_speed) / self.payload
# # / self.avg_goto_excavator_weight[unload_area_index][load_area_index]
# 初始化车流规划类 # 初始化车流规划类
def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump): def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump):
try:
tra_para = Traffic_para(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump) tra_para = Traffic_para(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump)
Traffic_para.extract_walk_time_info(tra_para) tra_para.period_map_para_load()
tra_para.period_walk_para_load()
# Traffic_para.extract_walk_time_info(tra_para)
Traffic_para.extract_excavator_info(tra_para) Traffic_para.extract_excavator_info(tra_para)
Traffic_para.extract_dump_info(tra_para) Traffic_para.extract_dump_info(tra_para)
Traffic_para.extract_walk_time_info(tra_para)
# 全部矿卡设备集合 # 全部矿卡设备集合
truck_set = set(update_total_truck()) truck_set = set(update_total_truck())
...@@ -208,15 +255,14 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu ...@@ -208,15 +255,14 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu
tra_para.priority_coefficient[i][j] = tra_para.excavator_priority_coefficient[i] \ tra_para.priority_coefficient[i][j] = tra_para.excavator_priority_coefficient[i] \
* tra_para.dump_priority_coefficient[j] * tra_para.dump_priority_coefficient[j]
# 逻辑距离赋值,来自实际道路距离 # # 逻辑距离赋值,来自实际道路距离
tra_para.goto_excavator_distance[j][i] = \ # tra_para.walk_time_to_excavator[j][i] = \
tra_para.goto_load_area_distance[unload_area_index][load_area_index] # tra_para.walk_time_to_load_area[unload_area_index][load_area_index]
#
# tra_para.walk_time_to_dump[i][j] = \
# tra_para.walk_time_to_unload_area[load_area_index][unload_area_index]
print(i, j) except Exception as es:
print(tra_para.goto_dump_distance) logger.error(es)
print(load_area_index, unload_area_index) logger.error("车流规划类比初始化异常")
print(tra_para.goto_unload_area_distance)
tra_para.goto_dump_distance[i][j] = \
tra_para.goto_unload_area_distance[load_area_index][unload_area_index]
return tra_para return tra_para
...@@ -14,15 +14,6 @@ from traffic_flow.traffic_flow_info import * ...@@ -14,15 +14,6 @@ from traffic_flow.traffic_flow_info import *
# start = time.time() # start = time.time()
# much_job = [x**2 for x in range (1, 1000000, 3)] # much_job = [x**2 for x in range (1, 1000000, 3)]
# 需要提供的值
# traffic_programme_para.excavator_strength[excavator_index] = 200 # 挖机最大装载能力,单位吨/小时
# traffic_programme_para.grade_loading_array[excavator_index] = 100 # 挖机装载物料品位
# traffic_programme_para.excavator_priority_coefficient[excavator_index] = 1 # 挖机优先级
# traffic_programme_para.dump_strength[dump_index] = 200 # 卸载设备最大卸载能力,单位吨/小时
# traffic_programme_para.grade_upper_dump_array[dump_index] = 100 # 卸载设备品位上限
# traffic_programme_para.grade_lower_dump_array[dump_index] = 100 # 卸载设备品位下限
# traffic_programme_para.dump_priority_coefficient[dump_index] = 1 # 卸载设备优先级
# 从数据库中读取挖机和卸载设备相关参数,并将线性规划所用参数保存在TrafficProgPara类中 # 从数据库中读取挖机和卸载设备相关参数,并将线性规划所用参数保存在TrafficProgPara类中
...@@ -31,7 +22,7 @@ from traffic_flow.traffic_flow_info import * ...@@ -31,7 +22,7 @@ from traffic_flow.traffic_flow_info import *
def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator,
b_dump, grade_loading_array, b_dump, grade_loading_array,
max_unload_weigh_alg_flag, truck_total_num, max_unload_weigh_alg_flag, truck_total_num,
goto_excavator_dis, goto_dump_dis, min_throughout, walk_time_to_excavator, walk_time_to_dump, min_throughout,
grade_lower_array=None, grade_upper_array=None): grade_lower_array=None, grade_upper_array=None):
row = len(coefficient) # 代表挖机的个数,第i行代表第i台挖机 row = len(coefficient) # 代表挖机的个数,第i行代表第i台挖机
col = len(coefficient[0]) # 代表卸载设备的个数,第j行代表第j个卸载设备 col = len(coefficient[0]) # 代表卸载设备的个数,第j行代表第j个卸载设备
...@@ -51,8 +42,8 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, ...@@ -51,8 +42,8 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator,
prob += pulp.lpDot(flatten(var_x), coefficient.flatten()) prob += pulp.lpDot(flatten(var_x), coefficient.flatten())
else: else:
prob = pulp.LpProblem('Transportation Problem', sense=pulp.LpMinimize) prob = pulp.LpProblem('Transportation Problem', sense=pulp.LpMinimize)
goto_excavator_cost = var_x * goto_excavator_dis goto_excavator_cost = var_x * walk_time_to_excavator
goto_dump_cost = var_y * goto_dump_dis goto_dump_cost = var_y * walk_time_to_dump
prob += (pulp.lpSum(flatten(goto_excavator_cost)) + 1.5 * pulp.lpSum(flatten(goto_dump_cost))) prob += (pulp.lpSum(flatten(goto_excavator_cost)) + 1.5 * pulp.lpSum(flatten(goto_dump_cost)))
# 定义约束条件 # 定义约束条件
...@@ -60,6 +51,9 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, ...@@ -60,6 +51,9 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator,
if max_unload_weigh_alg_flag == False: if max_unload_weigh_alg_flag == False:
prob += pulp.lpSum(var_x) >= min_throughout prob += pulp.lpSum(var_x) >= min_throughout
logger.info("road_factor")
logger.info(w_ij)
# 矿卡总数约束,在每条道路上的车辆总数要小于矿卡总个数 # 矿卡总数约束,在每条道路上的车辆总数要小于矿卡总个数
# 通过矩阵按元素相乘得到每条卸载道路上的车辆个数 # 通过矩阵按元素相乘得到每条卸载道路上的车辆个数
unload_truck_total_num_array = w_ij * var_x unload_truck_total_num_array = w_ij * var_x
...@@ -67,7 +61,7 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, ...@@ -67,7 +61,7 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator,
load_truck_totla_num_array = s_ij * var_y load_truck_totla_num_array = s_ij * var_y
# 装载的矿卡数和卸载的矿卡数需要小于矿卡总数 # 装载的矿卡数和卸载的矿卡数需要小于矿卡总数
prob += (pulp.lpSum(unload_truck_total_num_array) + prob += (pulp.lpSum(unload_truck_total_num_array) +
pulp.lpSum(load_truck_totla_num_array) <= truck_total_num) pulp.lpSum(load_truck_totla_num_array) <= 2)
# 最大工作强度约束 # 最大工作强度约束
# 约束每个挖机的工作强度 # 约束每个挖机的工作强度
...@@ -168,13 +162,13 @@ def traffic_flow_plan(): ...@@ -168,13 +162,13 @@ def traffic_flow_plan():
grade_lower_dump_array = traffic_programme_para.grade_lower_dump_array grade_lower_dump_array = traffic_programme_para.grade_lower_dump_array
grade_upper_dump_array = traffic_programme_para.grade_upper_dump_array grade_upper_dump_array = traffic_programme_para.grade_upper_dump_array
min_throughout = traffic_programme_para.min_throughout min_throughout = traffic_programme_para.min_throughout
goto_excavator_distance = traffic_programme_para.goto_excavator_distance walk_time_to_excavator = traffic_programme_para.walk_time_to_excavator
goto_dump_distance = traffic_programme_para.goto_dump_distance walk_time_to_dump = traffic_programme_para.walk_time_to_dump
truck_total_num = traffic_programme_para.truck_total_num truck_total_num = traffic_programme_para.truck_total_num
res = transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, b_dump, res = transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, b_dump,
grade_loading_array, max_unload_weigh_alg_flag, truck_total_num, grade_loading_array, max_unload_weigh_alg_flag, truck_total_num,
goto_excavator_distance, goto_dump_distance, min_throughout, walk_time_to_excavator, walk_time_to_dump, min_throughout,
grade_upper_dump_array, grade_lower_dump_array) grade_upper_dump_array, grade_lower_dump_array)
if max_unload_weigh_alg_flag: if max_unload_weigh_alg_flag:
...@@ -192,11 +186,14 @@ def traffic_flow_plan(): ...@@ -192,11 +186,14 @@ def traffic_flow_plan():
logger.info(f'空运车流:{res["var_y"]} 单位: 吨/时') logger.info(f'空运车流:{res["var_y"]} 单位: 吨/时')
# 通过矩阵按元素相乘得到每条卸载道路上的车辆个数 # 通过矩阵按元素相乘得到每条卸载道路上的车辆个数
print("卸载道路上的车辆个数")
unload_traffic = res['var_x'] unload_traffic = res['var_x']
print((traffic_programme_para.goto_dump_factor * unload_traffic).round(3)) print((traffic_programme_para.goto_dump_factor * unload_traffic).round(3))
# 通过矩阵按元素相乘得到每条装载道路上的车辆个数 # 通过矩阵按元素相乘得到每条装载道路上的车辆个数
print("装载道路上的车辆个数")
load_traffic = res['var_y'] load_traffic = res['var_y']
print((traffic_programme_para.goto_excavator_factor * load_traffic).round(3)) print((traffic_programme_para.goto_excavator_factor * load_traffic).round(3))
return res["var_x"], res["var_y"] return res["var_x"], res["var_y"]
traffic_flow_plan() traffic_flow_plan()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment