Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
HYH.APSJ
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
佟礼
HYH.APSJ
Commits
8423472d
Commit
8423472d
authored
Dec 03, 2025
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://39.100.78.207:1213/tongli/hyh.apsj
parents
343f8a88
cfcaec50
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
807 additions
and
41 deletions
+807
-41
schedule_log.txt
schedule_log.txt
+333
-0
ResourceGanttController.java
...ava/com/aps/controller/gantt/ResourceGanttController.java
+54
-6
GAScheduleResult.java
src/main/java/com/aps/entity/Algorithm/GAScheduleResult.java
+2
-1
Entry.java
src/main/java/com/aps/entity/basic/Entry.java
+17
-1
GeneticAlgorithm.java
...main/java/com/aps/service/Algorithm/GeneticAlgorithm.java
+1
-1
GeneticDecoder.java
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
+11
-0
IdGroupingWithDualSerial.java
...a/com/aps/service/Algorithm/IdGroupingWithDualSerial.java
+22
-7
ScheduleOperationService.java
...a/com/aps/service/Algorithm/ScheduleOperationService.java
+262
-12
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+105
-13
No files found.
schedule_log.txt
View file @
8423472d
...
...
@@ -65568,3 +65568,336 @@
[22480-22800]:[10-16 14:40-10-16 20:00] 时长320分钟
[23520-24000]:[10-17 08:00-10-17 16:00] 时长480分钟
[2025-11-28 09:25:03]
[2025-12-02 09:04:16]
=== Schedule Summary === 0.482097
[2025-12-02 09:04:16] Operation: 2|1|1
[2025-12-02 09:04:16] Makespan: 149400.000000 minutes
[2025-12-02 09:04:16] Total Tardiness: 0.000000 hours
[2025-12-02 09:04:16] Setup Time: 0.000000 minutes
[2025-12-02 09:04:16] Flow Time: 232800.000000 minutes
[2025-12-02 09:04:16] Machine Load Balance: 91.05%
[2025-12-02 09:04:16] -------------------------
[2025-12-02 09:17:48]
=== Schedule Summary === 0.482097
[2025-12-02 09:17:48] Operation: 2|1|1
[2025-12-02 09:17:48] Makespan: 149400.000000 minutes
[2025-12-02 09:17:48] Total Tardiness: 0.000000 hours
[2025-12-02 09:17:48] Setup Time: 0.000000 minutes
[2025-12-02 09:17:48] Flow Time: 232800.000000 minutes
[2025-12-02 09:17:48] Machine Load Balance: 91.05%
[2025-12-02 09:17:48] -------------------------
[2025-12-02 09:20:58]
=== Schedule Summary === 0.482097
[2025-12-02 09:20:58] Operation: 2|1|1
[2025-12-02 09:20:58] Makespan: 149400.000000 minutes
[2025-12-02 09:20:58] Total Tardiness: 0.000000 hours
[2025-12-02 09:20:58] Setup Time: 0.000000 minutes
[2025-12-02 09:20:58] Flow Time: 232800.000000 minutes
[2025-12-02 09:20:58] Machine Load Balance: 91.05%
[2025-12-02 09:20:58] -------------------------
[2025-12-02 09:25:21]
=== Schedule Summary === 0.482097
[2025-12-02 09:25:21] Operation: 2|1|1
[2025-12-02 09:25:21] Makespan: 149400.000000 minutes
[2025-12-02 09:25:21] Total Tardiness: 0.000000 hours
[2025-12-02 09:25:21] Setup Time: 0.000000 minutes
[2025-12-02 09:25:22] Flow Time: 232800.000000 minutes
[2025-12-02 09:25:22] Machine Load Balance: 91.05%
[2025-12-02 09:25:22] -------------------------
[2025-12-02 09:25:22] [27000-63000]:[10-19 18:00-11-13 18:00] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[2025-12-02 09:25:22] [63000-137400]:[11-13 18:00-01-04 10:00] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[11-13 18:00-12-08 18:00] 36000
[113400-137400]:[12-18 18:00-01-04 10:00] 24000
[2025-12-02 09:25:22]
[2025-12-02 09:25:22] [27000-149400]:[10-19 18:00-01-12 18:00] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[113400-149400]:[12-18 18:00-01-12 18:00] 36000
[2025-12-02 09:25:22]
[2025-12-02 09:33:47]
=== Schedule Summary === 0.482097
[2025-12-02 09:33:47] Operation: 2|1|1
[2025-12-02 09:33:47] Makespan: 149400.000000 minutes
[2025-12-02 09:33:47] Total Tardiness: 0.000000 hours
[2025-12-02 09:33:47] Setup Time: 0.000000 minutes
[2025-12-02 09:33:47] Flow Time: 232800.000000 minutes
[2025-12-02 09:33:47] Machine Load Balance: 91.05%
[2025-12-02 09:33:47] -------------------------
[2025-12-02 09:33:47] [27000-63000]:[10-19 18:00-11-13 18:00] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[2025-12-02 09:33:47] [63000-137400]:[11-13 18:00-01-04 10:00] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[11-13 18:00-12-08 18:00] 36000
[113400-137400]:[12-18 18:00-01-04 10:00] 24000
[2025-12-02 09:33:47]
[2025-12-02 09:33:47] [27000-149400]:[10-19 18:00-01-12 18:00] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[113400-149400]:[12-18 18:00-01-12 18:00] 36000
[2025-12-02 09:33:47]
[2025-12-02 09:37:24]
=== Schedule Summary === 0.482097
[2025-12-02 09:37:24] Operation: 2|1|1
[2025-12-02 09:37:24] Makespan: 149400.000000 minutes
[2025-12-02 09:37:24] Total Tardiness: 0.000000 hours
[2025-12-02 09:37:24] Setup Time: 0.000000 minutes
[2025-12-02 09:37:24] Flow Time: 232800.000000 minutes
[2025-12-02 09:37:24] Machine Load Balance: 91.05%
[2025-12-02 09:37:24] -------------------------
[2025-12-02 09:37:24] [27000-63000]:[10-19 18:00-11-13 18:00] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[2025-12-02 09:37:24] [63000-137400]:[11-13 18:00-01-04 10:00] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[11-13 18:00-12-08 18:00] 36000
[113400-137400]:[12-18 18:00-01-04 10:00] 24000
[2025-12-02 09:37:24]
[2025-12-02 09:37:24] [27000-149400]:[10-19 18:00-01-12 18:00] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[113400-149400]:[12-18 18:00-01-12 18:00] 36000
[2025-12-02 09:37:24]
[2025-12-02 09:49:24]
=== Schedule Summary === 0.482097
[2025-12-02 09:49:24] Operation: 2|1|1
[2025-12-02 09:49:24] Makespan: 149400.000000 minutes
[2025-12-02 09:49:24] Total Tardiness: 0.000000 hours
[2025-12-02 09:49:24] Setup Time: 0.000000 minutes
[2025-12-02 09:49:24] Flow Time: 232800.000000 minutes
[2025-12-02 09:49:24] Machine Load Balance: 91.05%
[2025-12-02 09:49:24] -------------------------
[2025-12-02 09:49:24] [27000-63000]:[10-19 18:00-11-13 18:00] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[2025-12-02 09:49:24] [63000-137400]:[11-13 18:00-01-04 10:00] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[11-13 18:00-12-08 18:00] 36000
[113400-137400]:[12-18 18:00-01-04 10:00] 24000
[2025-12-02 09:49:24]
[2025-12-02 09:49:24] [27000-149400]:[10-19 18:00-01-12 18:00] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[113400-149400]:[12-18 18:00-01-12 18:00] 36000
[2025-12-02 09:49:24]
[2025-12-02 09:52:15]
=== Schedule Summary === 0.482097
[2025-12-02 09:52:15] Operation: 2|1|1
[2025-12-02 09:52:15] Makespan: 3319860.000000 minutes
[2025-12-02 09:52:15] Total Tardiness: 0.000000 hours
[2025-12-02 09:52:15] Setup Time: 0.000000 minutes
[2025-12-02 09:52:15] Flow Time: 218460.000000 minutes
[2025-12-02 09:52:15] Machine Load Balance: 99.98%
[2025-12-02 09:52:15] -------------------------
[2025-12-02 09:52:15] [3223800-3259800]:[11-17 18:00-12-12 18:00] Order 1, Machine 3402, Operation 1, Batch 50000.0, processingTime %.1f
[3223800-3259800]:[11-17 18:00-12-12 18:00] 36000
[2025-12-02 09:52:15] [3259800-3319860]:[12-12 18:00-01-23 11:00] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[3259800-3310140]:[12-12 18:00-01-16 17:00] 50340
[3310200-3319860]:[01-16 18:00-01-23 11:00] 9660
[2025-12-02 09:52:15]
[2025-12-02 09:52:15] [27000-149400]:[10-19 18:00-01-12 18:00] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[113400-149400]:[12-18 18:00-01-12 18:00] 36000
[2025-12-02 09:52:15]
[2025-12-02 09:58:49]
=== Schedule Summary === 0.482097
[2025-12-02 09:58:49] Operation: 2|1|1
[2025-12-02 09:58:49] Makespan: 149400.000000 minutes
[2025-12-02 09:58:49] Total Tardiness: 0.000000 hours
[2025-12-02 09:58:49] Setup Time: 0.000000 minutes
[2025-12-02 09:58:49] Flow Time: 232800.000000 minutes
[2025-12-02 09:58:49] Machine Load Balance: 91.05%
[2025-12-02 09:58:49] -------------------------
[2025-12-02 09:58:49] [27000-63000]:[10-19 18:00-11-13 18:00] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[2025-12-02 09:58:49] [63000-137400]:[11-13 18:00-01-04 10:00] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[11-13 18:00-12-08 18:00] 36000
[113400-137400]:[12-18 18:00-01-04 10:00] 24000
[2025-12-02 09:58:49]
[2025-12-02 09:58:49] [27000-149400]:[10-19 18:00-01-12 18:00] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[113400-149400]:[12-18 18:00-01-12 18:00] 36000
[2025-12-02 09:58:49]
[2025-12-02 10:11:01]
=== Schedule Summary === 0.482097
[2025-12-02 10:11:01] Operation: 2|1|1
[2025-12-02 10:11:01] Makespan: 3319860.000000 minutes
[2025-12-02 10:11:01] Total Tardiness: 0.000000 hours
[2025-12-02 10:11:01] Setup Time: 0.000000 minutes
[2025-12-02 10:11:01] Flow Time: 218460.000000 minutes
[2025-12-02 10:11:01] Machine Load Balance: 99.98%
[2025-12-02 10:11:01] -------------------------
[2025-12-02 10:11:01] [3223800-3259800]:[11-17 18:00-12-12 18:00] Order 1, Machine 3402, Operation 1, Batch 50000.0, processingTime %.1f
[3223800-3259800]:[11-17 18:00-12-12 18:00] 36000
[2025-12-02 10:11:01] [3259800-3319860]:[12-12 18:00-01-23 11:00] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[3259800-3310140]:[12-12 18:00-01-16 17:00] 50340
[3310200-3319860]:[01-16 18:00-01-23 11:00] 9660
[2025-12-02 10:11:01]
[2025-12-02 10:11:01] [27000-149400]:[10-19 18:00-01-12 18:00] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-19 18:00-11-13 18:00] 36000
[113400-149400]:[12-18 18:00-01-12 18:00] 36000
[2025-12-02 10:11:01]
[2025-12-02 10:17:34]
=== Schedule Summary === 0.482097
[2025-12-02 10:17:34] Operation: 2|1|1
[2025-12-02 10:17:34] Makespan: 149400.000000 minutes
[2025-12-02 10:17:34] Total Tardiness: 0.000000 hours
[2025-12-02 10:17:34] Setup Time: 0.000000 minutes
[2025-12-02 10:17:34] Flow Time: 232800.000000 minutes
[2025-12-02 10:17:34] Machine Load Balance: 91.05%
[2025-12-02 10:17:34] -------------------------
[2025-12-02 10:17:34] [27000-63000]:[10-01 07:30-10-01 17:30] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[10-01 07:30-10-01 17:30] 36000
[2025-12-02 10:17:34] [63000-137400]:[10-01 17:30-10-02 14:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[10-01 17:30-10-02 03:30] 36000
[113400-137400]:[10-02 07:30-10-02 14:10] 24000
[2025-12-02 10:17:34]
[2025-12-02 10:17:34] [27000-149400]:[10-01 07:30-10-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-01 07:30-10-01 17:30] 36000
[113400-149400]:[10-02 07:30-10-02 17:30] 36000
[2025-12-02 10:17:34]
[2025-12-02 10:18:35]
=== Schedule Summary === 0.482097
[2025-12-02 10:18:35] Operation: 2|1|1
[2025-12-02 10:18:35] Makespan: 3247800.000000 minutes
[2025-12-02 10:18:35] Total Tardiness: 0.000000 hours
[2025-12-02 10:18:35] Setup Time: 0.000000 minutes
[2025-12-02 10:18:35] Flow Time: 232800.000000 minutes
[2025-12-02 10:18:35] Machine Load Balance: 99.98%
[2025-12-02 10:18:35] -------------------------
[2025-12-02 10:18:35] [3137400-3173400]:[11-06 07:30-11-06 17:30] Order 1, Machine 3402, Operation 1, Batch 50000.0, processingTime %.1f
[3137400-3173400]:[11-06 07:30-11-06 17:30] 36000
[2025-12-02 10:18:35] [3173400-3247800]:[11-06 17:30-11-07 14:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[3173400-3209400]:[11-06 17:30-11-07 03:30] 36000
[3223800-3247800]:[11-07 07:30-11-07 14:10] 24000
[2025-12-02 10:18:35]
[2025-12-02 10:18:35] [27000-149400]:[10-01 07:30-10-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-01 07:30-10-01 17:30] 36000
[113400-149400]:[10-02 07:30-10-02 17:30] 36000
[2025-12-02 10:18:35]
[2025-12-02 10:24:35]
=== Schedule Summary === 0.482097
[2025-12-02 10:24:35] Operation: 2|1|1
[2025-12-02 10:24:35] Makespan: 149400.000000 minutes
[2025-12-02 10:24:35] Total Tardiness: 0.000000 hours
[2025-12-02 10:24:35] Setup Time: 0.000000 minutes
[2025-12-02 10:24:35] Flow Time: 232800.000000 minutes
[2025-12-02 10:24:35] Machine Load Balance: 91.05%
[2025-12-02 10:24:35] -------------------------
[2025-12-02 10:24:35] [27000-63000]:[10-01 07:30-10-01 17:30] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[10-01 07:30-10-01 17:30] 36000
[2025-12-02 10:24:35] [63000-137400]:[10-01 17:30-10-02 14:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[10-01 17:30-10-02 03:30] 36000
[113400-137400]:[10-02 07:30-10-02 14:10] 24000
[2025-12-02 10:24:35]
[2025-12-02 10:24:35] [27000-149400]:[10-01 07:30-10-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-01 07:30-10-01 17:30] 36000
[113400-149400]:[10-02 07:30-10-02 17:30] 36000
[2025-12-02 10:24:35]
[2025-12-02 10:24:54]
=== Schedule Summary === 0.482097
[2025-12-02 10:24:54] Operation: 2|1|1
[2025-12-02 10:24:54] Makespan: 3247800.000000 minutes
[2025-12-02 10:24:54] Total Tardiness: 0.000000 hours
[2025-12-02 10:24:54] Setup Time: 0.000000 minutes
[2025-12-02 10:24:54] Flow Time: 232800.000000 minutes
[2025-12-02 10:24:54] Machine Load Balance: 99.98%
[2025-12-02 10:24:54] -------------------------
[2025-12-02 10:24:54] [3137400-3173400]:[11-06 07:30-11-06 17:30] Order 1, Machine 3402, Operation 1, Batch 50000.0, processingTime %.1f
[3137400-3173400]:[11-06 07:30-11-06 17:30] 36000
[2025-12-02 10:24:54] [3173400-3247800]:[11-06 17:30-11-07 14:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[3173400-3209400]:[11-06 17:30-11-07 03:30] 36000
[3223800-3247800]:[11-07 07:30-11-07 14:10] 24000
[2025-12-02 10:24:54]
[2025-12-02 10:24:54] [27000-149400]:[10-01 07:30-10-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[10-01 07:30-10-01 17:30] 36000
[113400-149400]:[10-02 07:30-10-02 17:30] 36000
[2025-12-02 10:24:54]
[2025-12-02 10:28:00]
=== Schedule Summary === 0.482097
[2025-12-02 10:28:00] Operation: 2|1|1
[2025-12-02 10:28:00] Makespan: 149400.000000 minutes
[2025-12-02 10:28:00] Total Tardiness: 0.000000 hours
[2025-12-02 10:28:00] Setup Time: 0.000000 minutes
[2025-12-02 10:28:00] Flow Time: 232800.000000 minutes
[2025-12-02 10:28:00] Machine Load Balance: 91.05%
[2025-12-02 10:28:00] -------------------------
[2025-12-02 10:28:05] [27000-63000]:[11-01 07:30-11-01 17:30] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[11-01 07:30-11-01 17:30] 36000
[2025-12-02 10:28:05] [63000-137400]:[11-01 17:30-11-02 14:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[11-01 17:30-11-02 03:30] 36000
[113400-137400]:[11-02 07:30-11-02 14:10] 24000
[2025-12-02 10:28:05]
[2025-12-02 10:28:05] [27000-149400]:[11-01 07:30-11-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[11-01 07:30-11-01 17:30] 36000
[113400-149400]:[11-02 07:30-11-02 17:30] 36000
[2025-12-02 10:28:05]
[2025-12-02 10:28:11]
=== Schedule Summary === 0.482097
[2025-12-02 10:28:11] Operation: 2|1|1
[2025-12-02 10:28:11] Makespan: 3247800.000000 minutes
[2025-12-02 10:28:11] Total Tardiness: 0.000000 hours
[2025-12-02 10:28:11] Setup Time: 0.000000 minutes
[2025-12-02 10:28:11] Flow Time: 232800.000000 minutes
[2025-12-02 10:28:11] Machine Load Balance: 99.98%
[2025-12-02 10:28:11] -------------------------
[2025-12-02 10:28:11] [3137400-3173400]:[12-07 07:30-12-07 17:30] Order 1, Machine 3402, Operation 1, Batch 50000.0, processingTime %.1f
[3137400-3173400]:[12-07 07:30-12-07 17:30] 36000
[2025-12-02 10:28:11] [3173400-3247800]:[12-07 17:30-12-08 14:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[3173400-3209400]:[12-07 17:30-12-08 03:30] 36000
[3223800-3247800]:[12-08 07:30-12-08 14:10] 24000
[2025-12-02 10:28:11]
[2025-12-02 10:28:11] [27000-149400]:[11-01 07:30-11-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[11-01 07:30-11-01 17:30] 36000
[113400-149400]:[11-02 07:30-11-02 17:30] 36000
[2025-12-02 10:28:11]
[2025-12-02 11:30:27]
=== Schedule Summary === 0.482097
[2025-12-02 11:30:27] Operation: 2|1|1
[2025-12-02 11:30:27] Makespan: 149400.000000 minutes
[2025-12-02 11:30:27] Total Tardiness: 0.000000 hours
[2025-12-02 11:30:27] Setup Time: 0.000000 minutes
[2025-12-02 11:30:27] Flow Time: 232800.000000 minutes
[2025-12-02 11:30:27] Machine Load Balance: 91.05%
[2025-12-02 11:30:27] -------------------------
[2025-12-02 11:30:27] [27000-63000]:[11-01 07:30-11-01 17:30] Order 1, Machine 3403, Operation 1, Batch 50000.0, processingTime %.1f
[27000-63000]:[11-01 07:30-11-01 17:30] 36000
[2025-12-02 11:30:27] [63000-137400]:[11-01 17:30-11-02 14:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[63000-99000]:[11-01 17:30-11-02 03:30] 36000
[113400-137400]:[11-02 07:30-11-02 14:10] 24000
[2025-12-02 11:30:27]
[2025-12-02 11:30:27] [27000-149400]:[11-01 07:30-11-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[11-01 07:30-11-01 17:30] 36000
[113400-149400]:[11-02 07:30-11-02 17:30] 36000
[2025-12-02 11:30:27]
[2025-12-02 11:30:27]
=== Schedule Summary === 0.482097
[2025-12-02 11:30:27] Operation: 2|1|1
[2025-12-02 11:30:27] Makespan: 3247800.000000 minutes
[2025-12-02 11:30:27] Total Tardiness: 0.000000 hours
[2025-12-02 11:30:27] Setup Time: 0.000000 minutes
[2025-12-02 11:30:27] Flow Time: 232800.000000 minutes
[2025-12-02 11:30:27] Machine Load Balance: 99.98%
[2025-12-02 11:30:27] -------------------------
[2025-12-02 11:30:27] [3137400-3173400]:[12-07 07:30-12-07 17:30] Order 1, Machine 3402, Operation 1, Batch 50000.0, processingTime %.1f
[3137400-3173400]:[12-07 07:30-12-07 17:30] 36000
[2025-12-02 11:30:27] [3173400-3247800]:[12-07 17:30-12-08 14:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[3173400-3209400]:[12-07 17:30-12-08 03:30] 36000
[3223800-3247800]:[12-08 07:30-12-08 14:10] 24000
[2025-12-02 11:30:27]
[2025-12-02 11:30:27] [27000-149400]:[11-01 07:30-11-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[11-01 07:30-11-01 17:30] 36000
[113400-149400]:[11-02 07:30-11-02 17:30] 36000
[2025-12-02 11:30:27]
[2025-12-02 19:40:14]
=== Schedule Summary === 0.482097
[2025-12-02 19:40:14] Operation: 2|1|1|1
[2025-12-02 19:40:14] Makespan: 149400.000000 minutes
[2025-12-02 19:40:14] Total Tardiness: 0.000000 hours
[2025-12-02 19:40:14] Setup Time: 0.000000 minutes
[2025-12-02 19:40:14] Flow Time: 232800.000000 minutes
[2025-12-02 19:40:14] Machine Load Balance: 91.05%
[2025-12-02 19:40:14] -------------------------
[2025-12-02 19:40:14] [27000-41400]:[11-01 07:30-11-01 11:30] Order 1, Machine 3403, Operation 1, Batch 20000.0, processingTime %.1f
[27000-41400]:[11-01 07:30-11-01 11:30] 14400
[2025-12-02 19:40:14] [41400-115800]:[11-01 11:30-11-02 08:10] Order 1, Machine 3243, Operation 2, Batch 50000.0, processingTime %.1f
[41400-99000]:[11-01 11:30-11-02 03:30] 57600
[113400-115800]:[11-02 07:30-11-02 08:10] 2400
[2025-12-02 19:40:14] [41400-63000]:[11-01 11:30-11-01 17:30] Order 1, Machine 3403, Operation 4, Batch 30000.0, processingTime %.1f
[41400-63000]:[11-01 11:30-11-01 17:30] 21600
[2025-12-02 19:40:14]
[2025-12-02 19:40:14] [27000-149400]:[11-01 07:30-11-02 17:30] Order 2, Machine 2183, Operation 3, Batch 20.0, processingTime %.1f
[27000-63000]:[11-01 07:30-11-01 17:30] 36000
[113400-149400]:[11-02 07:30-11-02 17:30] 36000
[2025-12-02 19:40:14]
src/main/java/com/aps/controller/gantt/ResourceGanttController.java
View file @
8423472d
...
...
@@ -15,13 +15,11 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import
io.swagger.v3.oas.annotations.Operation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
import
java.time.LocalDateTime
;
import
java.time.temporal.ChronoUnit
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
...
...
@@ -136,14 +134,64 @@ public class ResourceGanttController {
}
@GetMapping
(
"/Move"
)
public
Chromosome
Move
(
String
SceneId
,
int
opid
,
LocalDateTime
newStartTime
,
Long
newMachineId
)
{
// opid=1;
// newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0);
// newMachineId=3402L;
// SceneId="B571EF6682DB463AB2977B1055A74112";
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome
scheduleChromosomes
=
planResultService
.
Move
(
SceneId
,
opid
,
newStartTime
,
newMachineId
);
// 提取所有场景ID
return
scheduleChromosomes
;
}
@PostMapping
(
"/SpiltOperation"
)
public
Chromosome
SpiltOperation
(
@RequestParam
String
SceneId
,
@RequestParam
int
opid
,
@RequestBody
List
<
Double
>
splitCounts
)
{
opid
=
1
;
// newStartTime= LocalDateTime.of(2025, 12, 7, 0, 0);
// newMachineId=3402L;
splitCounts
=
new
ArrayList
<>();
splitCounts
.
add
(
20000
d
);
splitCounts
.
add
(
30000
d
);
SceneId
=
"B571EF6682DB463AB2977B1055A74112"
;
public
Chromosome
Move
()
{
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome
scheduleChromosomes
=
planResultService
.
Move
(
"B571EF6682DB463AB2977B1055A74112"
);
Chromosome
scheduleChromosomes
=
planResultService
.
SpiltOperation
(
SceneId
,
opid
,
splitCounts
.
toArray
(
new
Double
[
0
])
);
// 提取所有场景ID
return
scheduleChromosomes
;
}
@PostMapping
(
"/delOperation"
)
public
Chromosome
DelOperation
(
@RequestParam
String
SceneId
,
@RequestParam
int
opid
)
{
opid
=
1
;
SceneId
=
"B571EF6682DB463AB2977B1055A74112"
;
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome
scheduleChromosomes
=
planResultService
.
DelOperation
(
SceneId
,
opid
);
// 提取所有场景ID
return
scheduleChromosomes
;
}
@PostMapping
(
"/LockedOperation"
)
public
Chromosome
LockedOperation
(
@RequestParam
String
SceneId
,
@RequestParam
int
opid
,
@RequestParam
boolean
isLocked
)
{
opid
=
1
;
SceneId
=
"B571EF6682DB463AB2977B1055A74112"
;
// 调用 PlanResultService 获取 ScheduleChromosome 列表
Chromosome
scheduleChromosomes
=
planResultService
.
LockOperation
(
SceneId
,
opid
,
isLocked
);
// 提取所有场景ID
return
scheduleChromosomes
;
}
/**
* 将 ScheduleChromosome 转换为 ResourceGanttVO 列表
...
...
src/main/java/com/aps/entity/Algorithm/GAScheduleResult.java
View file @
8423472d
...
...
@@ -27,7 +27,8 @@ public class GAScheduleResult {
private
double
Quantity
;
// 批次大小(订单可拆分)
private
List
<
ScheduleResultDetail
>
GeneDetails
;
// 时间详情
private
int
designatedStartTime
=
-
1
;
// 设计开始时间(默认-1)
private
int
forcedMachineId
=
-
1
;
// 强制分配的设备ID(-1表示无强制)
private
Long
forcedMachineId
=-
1L
;
// 强制分配的设备ID(-1表示无强制)
private
boolean
IsLocked
=
false
;
private
double
OneTime
;
// 单件工时
private
double
ProcessingTime
;
// 绝对处理时间(分钟)
private
int
ChangeoverTime
;
...
...
src/main/java/com/aps/entity/basic/Entry.java
View file @
8423472d
...
...
@@ -25,15 +25,26 @@ public class Entry {
public
int
GroupId
;
/**
*
所属组ID 需要按照前后顺序生产的工单给一组
*
原订单ID
*/
public
String
OrderId
;
private
Long
routingDetailId
;
private
Long
taskSeq
;
private
String
routingDetailName
;
private
String
productId
;
/**
* 工单ID
*/
public
String
ExecId
;
/**
* 工单ID
*/
public
String
MainId
;
/**
* 离散参数
*/
...
...
@@ -64,6 +75,11 @@ public class Entry {
*/
public
List
<
Integer
>
NextEntryIds
;
//后工序
/**
* 数据状态 1 拆分 2 新建
*/
public
Integer
state
;
/**
* 是否可中断,间缝插针
*/
...
...
src/main/java/com/aps/service/Algorithm/GeneticAlgorithm.java
View file @
8423472d
...
...
@@ -131,7 +131,7 @@ public class GeneticAlgorithm {
break
;
}
}
best
.
setBaseTime
(
param
.
getBaseTime
());
best
.
setInitMachines
(
ProductionDeepCopyUtil
.
deepCopyList
(
machines
));
best
.
setOrders
(
orders
);
// 步骤3:返回最优解
...
...
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
View file @
8423472d
...
...
@@ -168,6 +168,16 @@ public class GeneticDecoder {
Entry
currentOp
=
orderOps
.
get
(
scheduledCount
);
int
opSequence
=
currentOp
.
getSequence
();
GAScheduleResult
existingResult
=
chromosome
.
getResultOld
().
stream
()
.
filter
(
r
->
r
.
getOperationId
()
==
currentOp
.
Id
)
.
findFirst
().
orElse
(
null
);
if
(
existingResult
!=
null
)
{
if
(
existingResult
.
isIsLocked
())
{
continue
;
}
}
// 从映射表中获取机器和加工时间
OpMachine
machineOption
=
opMachineMap
.
stream
()
.
filter
(
m
->
m
.
getGroupId
()
==
groupId
&&
m
.
getSequence
()==
opSequence
)
...
...
@@ -356,6 +366,7 @@ public class GeneticDecoder {
result
.
setTeardownTime
(
teardownTime
);
if
(
existingResult
!=
null
)
{
result
.
setDesignatedStartTime
(
existingResult
.
getDesignatedStartTime
());
}
result
.
setOneTime
(
processingTime
);
...
...
src/main/java/com/aps/service/Algorithm/IdGroupingWithDualSerial.java
View file @
8423472d
...
...
@@ -215,7 +215,7 @@ public class IdGroupingWithDualSerial {
* @return 更新后的结果
*/
public
static
List
<
GroupResult
>
addNode
(
List
<
GroupResult
>
existingResults
,
int
targetGroupIndex
,
String
newId
,
List
<
Integer
>
newParentIds
,
List
<
Integer
>
newChildIds
)
{
String
newId
,
List
<
Integer
>
newParentIds
,
List
<
Integer
>
newChildIds
,
String
insertAfterOriginalId
)
{
// 1. 空值安全检查
if
(
existingResults
==
null
||
existingResults
.
isEmpty
()
||
targetGroupIndex
<
0
||
targetGroupIndex
>=
existingResults
.
size
())
{
throw
new
IllegalArgumentException
(
"无效的现有结果或目标分组索引"
);
...
...
@@ -244,12 +244,26 @@ public class IdGroupingWithDualSerial {
newGlobalSerial
++;
}
// 5. 找到新节点的插入位置(父节点之后)
// 5. 找到插入位置:优先插入到指定节点之后,否则插入到父节点之后
int
insertIndex
=
0
;
// 定位要插入到其后的节点(如"20")
if
(
insertAfterOriginalId
!=
null
&&
!
insertAfterOriginalId
.
trim
().
isEmpty
())
{
for
(
int
i
=
0
;
i
<
nodeList
.
size
();
i
++)
{
NodeInfo
node
=
nodeList
.
get
(
i
);
if
(
insertAfterOriginalId
.
equals
(
node
.
getOriginalId
()))
{
insertIndex
=
i
+
1
;
// 插入到指定节点之后
break
;
}
}
}
// 若未找到指定节点,回退到父节点之后的逻辑
if
(
insertIndex
==
0
)
{
for
(
int
i
=
0
;
i
<
nodeList
.
size
();
i
++)
{
NodeInfo
node
=
nodeList
.
get
(
i
);
if
(
newParentIds
.
contains
(
node
.
getGlobalSerial
()))
{
insertIndex
=
i
+
1
;
// 插入到最后一个父节点之后
insertIndex
=
i
+
1
;
}
}
}
...
...
@@ -528,7 +542,7 @@ public class IdGroupingWithDualSerial {
int
targetGroupIndex
=
1
;
// 分组2的索引
// 添加新节点
results
=
addNode
(
results
,
targetGroupIndex
,
newId
,
newParentIds
,
newChildIds
);
results
=
addNode
(
results
,
targetGroupIndex
,
newId
,
newParentIds
,
newChildIds
,
""
);
List
<
String
>
newIdList
=
Arrays
.
asList
(
"20"
,
"21"
,
"24"
);
...
...
@@ -540,6 +554,7 @@ public class IdGroupingWithDualSerial {
results
=
deleteNodeByGlobalSerial
(
results
,
13
);
// 输出结果
for
(
int
i
=
0
;
i
<
results
.
size
();
i
++)
{
GroupResult
groupResult
=
results
.
get
(
i
);
...
...
src/main/java/com/aps/service/Algorithm/ScheduleOperationService.java
View file @
8423472d
...
...
@@ -4,17 +4,20 @@ import com.aps.common.util.ProductionDeepCopyUtil;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Algorithm.GAScheduleResult
;
import
com.aps.entity.Algorithm.GlobalOperationInfo
;
import
com.aps.entity.Algorithm.IDAndChildID.GroupResult
;
import
com.aps.entity.Algorithm.IDAndChildID.NodeInfo
;
import
com.aps.entity.Algorithm.ScheduleResultDetail
;
import
com.aps.entity.basic.Entry
;
import
com.aps.entity.basic.GlobalParam
;
import
com.aps.entity.basic.MachineOption
;
import
com.aps.service.plan.MachineSchedulerService
;
import
org.apache.commons.lang3.StringUtils
;
import
javax.xml.transform.Result
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.NoSuchElementException
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.IntStream
;
/**
* 作者:佟礼
...
...
@@ -27,11 +30,10 @@ public class ScheduleOperationService {
* @param opId 工序ID
* @param newStartTime 新开始时间
* @param newMachineId 新设备ID
* @param baseTime 基准时间
*/
public
void
moveOperation
(
Chromosome
chromosome
,
int
opId
,
int
newStartTime
,
int
newMachineId
,
LocalDateTime
baseTime
,
GlobalParam
globalParam
)
{
List
<
Entry
>
allOperations
=
chromosome
.
getAllOperations
();
Long
newMachineId
,
GlobalParam
globalParam
)
{
List
<
Entry
>
allOperations
=
chromosome
.
getAllOperations
();
// 获取目标结果和工序
GAScheduleResult
targetResult
=
chromosome
.
getResult
().
stream
()
.
filter
(
r
->
r
.
getOperationId
()
==
opId
)
...
...
@@ -48,8 +50,7 @@ public class ScheduleOperationService {
.
collect
(
Collectors
.
toList
())
.
indexOf
(
newMachineId
)
+
1
;
if
(
machineOptionIndex
==
0
)
{
if
(
machineOptionIndex
==
0
)
{
throw
new
NoSuchElementException
(
"Machine not found: "
+
newMachineId
);
}
...
...
@@ -65,9 +66,6 @@ public class ScheduleOperationService {
.
orElseThrow
(()
->
new
NoSuchElementException
(
"Global operation not found: "
+
opId
));
chromosome
.
getMachineSelection
().
set
(
globalOpIndex
,
machineOptionIndex
);
// 生成新的工序顺序
...
...
@@ -91,19 +89,271 @@ public class ScheduleOperationService {
.
collect
(
Collectors
.
toList
());
chromosome
.
setOperationSequencing
(
operationSequencing
);
// 重新解码
redecode
(
chromosome
,
chromosome
.
getBaseTime
(),
globalParam
);
}
public
void
SpiltOperation
(
Chromosome
chromosome
,
int
opId
,
Double
[]
splitCounts
,
GlobalParam
globalParam
)
{
List
<
Entry
>
allOperations
=
chromosome
.
getAllOperations
();
List
<
GroupResult
>
OperatRels
=
chromosome
.
getOperatRel
();
Entry
targetOp
=
allOperations
.
stream
()
.
filter
(
o
->
o
.
getId
()
==
opId
)
.
findFirst
()
.
orElseThrow
(()
->
new
NoSuchElementException
(
"Operation not found: "
+
opId
));
GAScheduleResult
targetSr
=
chromosome
.
getResult
().
stream
()
.
filter
(
o
->
o
.
getOperationId
()
==
opId
)
.
findFirst
()
.
orElseThrow
(()
->
new
NoSuchElementException
(
"Operation not found: "
+
opId
));
// 找到原来的组和父子级
GroupResult
groupResult
=
OperatRels
.
get
(
targetOp
.
GroupId
-
1
);
List
<
NodeInfo
>
nodeInfoList
=
groupResult
.
getNodeInfoList
();
NodeInfo
Oprel
=
nodeInfoList
.
stream
()
.
filter
(
o
->
o
.
getGlobalSerial
()
==
opId
)
.
findFirst
()
.
orElseThrow
(()
->
new
NoSuchElementException
(
"Operation not found: "
+
opId
));
int
targetGroupIndex
=
targetOp
.
GroupId
-
1
;
List
<
Integer
>
newParentIds
=
Oprel
.
getNewParentIds
();
List
<
Integer
>
newChildIds
=
Oprel
.
getNewChildIds
();
//记录新的工序ID和数量
Map
<
String
,
Double
>
newids
=
new
HashMap
<>();
String
MainId
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
for
(
int
i
=
0
;
i
<
splitCounts
.
length
;
i
++)
{
String
newId
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
if
(
i
==
0
)
{
newids
.
put
(
targetOp
.
ExecId
,
splitCounts
[
i
]);
}
else
{
newids
.
put
(
newId
,
splitCounts
[
i
]);
// 添加新节点
OperatRels
=
IdGroupingWithDualSerial
.
addNode
(
OperatRels
,
targetGroupIndex
,
newId
,
newParentIds
,
newChildIds
,
targetOp
.
getExecId
());
}
}
chromosome
.
setOperatRel
(
OperatRels
);
//当前组的
groupResult
=
OperatRels
.
get
(
targetGroupIndex
);
nodeInfoList
=
groupResult
.
getNodeInfoList
();
//全局ID
int
globalOpId
=
chromosome
.
getGlobalOpList
().
stream
()
.
mapToInt
(
GlobalOperationInfo:
:
getGlobalOpId
)
.
max
()
.
orElse
(
0
)+
1
;
//找到原工序用的设备序号
List
<
MachineOption
>
optionalMachines
=
targetOp
.
getMachineOptions
();
OptionalInt
index
=
IntStream
.
range
(
0
,
optionalMachines
.
size
())
.
filter
(
i
->
targetSr
.
getMachineId
()==
optionalMachines
.
get
(
i
).
getMachineId
())
.
findFirst
();
int
machineSeq
=
index
.
orElse
(
0
)+
1
;
List
<
Integer
>
OperationSequencing
=
chromosome
.
getOperationSequencing
();
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
targetOp
.
GroupId
))
// 过滤出值为1的索引
.
skip
(
targetOp
.
Sequence
-
1
)
// 跳过第一个匹配项
.
findFirst
();
// 取第二个匹配项
int
targetOpIndex
=
OperationIndex
.
getAsInt
()+
1
;
for
(
NodeInfo
nodeInfo
:
nodeInfoList
)
{
Entry
entry
=
allOperations
.
stream
()
.
filter
(
o
->
o
.
getId
()
==
nodeInfo
.
getGlobalSerial
())
.
findFirst
()
.
orElse
(
null
);
if
(
entry
!=
null
)
{
//存在则修改顺和前后序
entry
.
setSequence
(
nodeInfo
.
getGroupSerial
());
entry
.
setPrevEntryIds
(
nodeInfo
.
getNewParentIds
());
entry
.
setNextEntryIds
(
nodeInfo
.
getNewChildIds
());
GlobalOperationInfo
info
=
chromosome
.
getGlobalOpList
().
stream
()
.
filter
(
t
->
t
.
getOp
().
getId
()==
entry
.
getId
())
.
findFirst
()
.
orElse
(
null
);
if
(
info
!=
null
)
{
info
.
setSequence
(
nodeInfo
.
getGroupSerial
());
}
if
(
entry
.
getId
()==
targetOp
.
getId
())
{
entry
.
setMainId
(
MainId
);
entry
.
setState
(
1
);
entry
.
setQuantity
(
newids
.
get
(
nodeInfo
.
getOriginalId
()));
}
}
else
{
//不存在创建新的
Entry
newOp
=
ProductionDeepCopyUtil
.
deepCopy
(
targetOp
);
newOp
.
setId
(
nodeInfo
.
getGlobalSerial
());
newOp
.
setSequence
(
nodeInfo
.
getGroupSerial
());
newOp
.
setExecId
(
nodeInfo
.
getOriginalId
());
newOp
.
setPrevEntryIds
(
nodeInfo
.
getNewParentIds
());
newOp
.
setNextEntryIds
(
nodeInfo
.
getNewChildIds
());
newOp
.
setQuantity
(
newids
.
get
(
nodeInfo
.
getOriginalId
()));
newOp
.
setMainId
(
MainId
);
newOp
.
setState
(
2
);
//工序基本信息
chromosome
.
getAllOperations
().
add
(
newOp
);
// 运算的全局变量
GlobalOperationInfo
info
=
new
GlobalOperationInfo
();
info
.
setGlobalOpId
(
globalOpId
);
info
.
setGroupId
(
newOp
.
getGroupId
());
info
.
setSequence
(
newOp
.
getSequence
());
info
.
setOp
(
newOp
);
chromosome
.
getGlobalOpList
().
add
(
info
);
globalOpId
++;
//排产的机器选择部分
chromosome
.
getMachineSelection
().
add
(
machineSeq
);
chromosome
.
getOperationSequencing
().
add
(
targetOpIndex
,
newOp
.
getGroupId
());
targetOpIndex
++;
}
}
redecode
(
chromosome
,
chromosome
.
getBaseTime
(),
globalParam
);
}
public
void
LockOperation
(
Chromosome
chromosome
,
int
opId
,
boolean
isLocked
,
GlobalParam
globalParam
)
{
GAScheduleResult
targetResult
=
chromosome
.
getResult
().
stream
()
.
filter
(
r
->
r
.
getOperationId
()
==
opId
)
.
findFirst
()
.
orElseThrow
(()
->
new
NoSuchElementException
(
"Operation not found: "
+
opId
));
targetResult
.
setIsLocked
(
isLocked
);
// 若解锁,重新解码受影响工序
if
(!
isLocked
)
{
redecode
(
chromosome
,
chromosome
.
getBaseTime
(),
globalParam
);
}
}
public
void
DelOperation
(
Chromosome
chromosome
,
int
opId
,
GlobalParam
globalParam
)
{
List
<
Entry
>
allOperations
=
chromosome
.
getAllOperations
();
List
<
GroupResult
>
OperatRels
=
chromosome
.
getOperatRel
();
OperatRels
=
IdGroupingWithDualSerial
.
deleteNodeByGlobalSerial
(
OperatRels
,
opId
);
chromosome
.
setOperatRel
(
OperatRels
);
Entry
targetOp
=
allOperations
.
stream
()
.
filter
(
o
->
o
.
getId
()
==
opId
)
.
findFirst
()
.
orElseThrow
(()
->
new
NoSuchElementException
(
"Operation not found: "
+
opId
));
List
<
Entry
>
entrys
=
allOperations
.
stream
()
.
filter
(
o
->
o
.
GroupId
==
targetOp
.
GroupId
)
.
collect
(
Collectors
.
toList
());
//当前组的
GroupResult
groupResult
=
OperatRels
.
get
(
targetOp
.
GroupId
-
1
);
List
<
NodeInfo
>
nodeInfoList
=
groupResult
.
getNodeInfoList
();
// 优化解码
nodeInfoList
=
groupResult
.
getNodeInfoList
();
for
(
Entry
entry
:
entrys
)
{
NodeInfo
node
=
nodeInfoList
.
stream
()
.
filter
(
o
->
o
.
getGlobalSerial
()
==
entry
.
getId
())
.
findFirst
()
.
orElse
(
null
);
if
(
node
!=
null
)
{
entry
.
setSequence
(
node
.
getGroupSerial
());
entry
.
setPrevEntryIds
(
node
.
getNewParentIds
());
entry
.
setNextEntryIds
(
node
.
getNewChildIds
());
GlobalOperationInfo
info
=
chromosome
.
getGlobalOpList
().
stream
()
.
filter
(
t
->
t
.
getOp
().
getId
()==
entry
.
getId
())
.
findFirst
()
.
orElse
(
null
);
if
(
info
!=
null
)
{
info
.
setSequence
(
node
.
getGroupSerial
());
}
}
else
{
if
(
StringUtils
.
isBlank
(
entry
.
getMainId
()))
{
//拆分的工序数量补齐到其他的
Entry
main
=
entrys
.
stream
().
filter
(
t
->
t
.
MainId
==
entry
.
getMainId
())
.
findFirst
()
.
orElse
(
null
);
if
(
main
!=
null
)
{
main
.
setQuantity
(
main
.
getQuantity
()
+
entry
.
getQuantity
());
}
}
}
}
List
<
Integer
>
OperationSequencing
=
chromosome
.
getOperationSequencing
();
OptionalInt
OperationIndex
=
IntStream
.
range
(
0
,
OperationSequencing
.
size
())
.
filter
(
i
->
OperationSequencing
.
get
(
i
).
equals
(
targetOp
.
GroupId
))
// 过滤出值为1的索引
.
skip
(
targetOp
.
Sequence
-
1
)
// 跳过第一个匹配项
.
findFirst
();
chromosome
.
getOperationSequencing
().
remove
(
OperationIndex
.
getAsInt
());
List
<
GlobalOperationInfo
>
globalOpList
=
chromosome
.
getGlobalOpList
();
int
globalOpIndex
=
IntStream
.
range
(
0
,
globalOpList
.
size
())
.
filter
(
i
->
globalOpList
.
get
(
i
).
getOp
().
getId
()
==
opId
)
.
findFirst
()
.
orElseThrow
(()
->
new
NoSuchElementException
(
"Global operation not found: "
+
opId
));
chromosome
.
getMachineSelection
().
remove
(
globalOpIndex
);
globalOpList
.
remove
(
globalOpIndex
);
List
<
Entry
>
operations
=
chromosome
.
getAllOperations
();
IntStream
.
range
(
0
,
operations
.
size
())
.
filter
(
i
->
operations
.
get
(
i
).
getId
()
==
opId
)
.
findFirst
()
.
ifPresent
(
operations:
:
remove
);
List
<
GAScheduleResult
>
results
=
chromosome
.
getResult
();
IntStream
.
range
(
0
,
results
.
size
())
.
filter
(
i
->
results
.
get
(
i
).
getOperationId
()
==
opId
)
.
findFirst
()
.
ifPresent
(
results:
:
remove
);
redecode
(
chromosome
,
chromosome
.
getBaseTime
(),
globalParam
);
}
/**
* 重新解码
* @param chromosome 原方案
* @param baseTime 基础时间
* @param globalParam 全局参数
*/
public
void
redecode
(
Chromosome
chromosome
,
LocalDateTime
baseTime
,
GlobalParam
globalParam
)
{
MachineSchedulerService
machineScheduler
=
new
MachineSchedulerService
(
baseTime
);
GeneticDecoder
decoder
=
new
GeneticDecoder
(
globalParam
,
baseTime
,
chromosome
.
getInitMachines
(),
chromosome
.
getOrders
(),
null
,
machineScheduler
);
chromosome
.
setMachines
(
chromosome
.
getInitMachines
());
chromosome
.
setResultOld
(
ProductionDeepCopyUtil
.
deepCopyList
(
chromosome
.
getResult
()));
chromosome
.
getResult
().
clear
();
List
<
GAScheduleResult
>
Resultlock
=
chromosome
.
getResult
().
stream
()
.
filter
(
o
->
o
.
isIsLocked
()
==
true
)
.
collect
(
Collectors
.
toList
());
chromosome
.
setResult
(
ProductionDeepCopyUtil
.
deepCopyList
(
Resultlock
));
decoder
.
decode
(
chromosome
);
if
(
chromosome
.
getFitness
()==
0
)
{
FitnessCalculator
fitnessCalc
=
new
FitnessCalculator
();
chromosome
.
setFitness
(
fitnessCalc
.
calculateFitness
(
chromosome
));
}
}
}
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
8423472d
...
...
@@ -31,6 +31,7 @@ import java.time.format.DateTimeFormatter;
import
java.time.temporal.ChronoUnit
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.IntStream
;
@Service
public
class
PlanResultService
{
...
...
@@ -66,7 +67,7 @@ public class PlanResultService {
@Autowired
private
ProdOrderProcessService
_prodOrderProcessService
;
private
final
LocalDateTime
baseTime
=
LocalDateTime
.
of
(
2025
,
10
,
1
,
0
,
0
,
0
);
private
LocalDateTime
baseTime
=
LocalDateTime
.
of
(
2025
,
11
,
1
,
0
,
0
,
0
);
public
List
<
ScheduleChromosome
>
execute
()
{
try
{
...
...
@@ -229,7 +230,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
WriteScheduleSummary
(
Chromosomes
);
ScheduleOperationService
ScheduleOperation
=
new
ScheduleOperationService
();
LocalDateTime
ds
=
LocalDateTime
.
of
(
2025
,
12
,
7
,
23
,
59
);
ScheduleOperation
.
moveOperation
(
Chromosomes
,
3
,
(
int
)
ChronoUnit
.
SECONDS
.
between
(
param
.
getBaseTime
(),
ds
),
2
,
param
.
getBaseTime
(),
globalParam
);
// ScheduleOperation.moveOperation(Chromosomes,3, (int)ChronoUnit.SECONDS.between(param.getBaseTime(), ds),(Long)
2,param.getBaseTime(), globalParam);
WriteScheduleSummary
(
Chromosomes
);
return
Chromosomes
;
...
...
@@ -297,23 +298,111 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
throw
new
RuntimeException
(
"调度执行失败"
,
e
);
}
}
public
Chromosome
Move
(
String
SceneId
)
{
public
Chromosome
EditOperation
(
String
SceneId
,
Entry
operation
)
{
Chromosome
chromosome
=
_sceneService
.
loadChromosomeFromFile
(
SceneId
);
if
(
chromosome
==
null
||
chromosome
.
getAllOperations
()
==
null
)
{
return
chromosome
;
// 直接返回,空值由上层处理
}
List
<
Entry
>
operations
=
chromosome
.
getAllOperations
();
// 直接查找匹配元素的索引(避免先找元素再查索引的冗余)
int
position
=
IntStream
.
range
(
0
,
operations
.
size
())
.
filter
(
i
->
{
Entry
t
=
operations
.
get
(
i
);
return
t
.
getId
()==
operation
.
getId
();
})
.
findFirst
()
.
orElse
(-
1
);
// 索引有效时替换
if
(
position
!=
-
1
)
{
operations
.
set
(
position
,
operation
);
}
ScheduleOperationService
ScheduleOperation
=
new
ScheduleOperationService
();
ScheduleParams
param
=
new
ScheduleParams
();
param
.
setBaseTime
(
LocalDateTime
.
of
(
2025
,
11
,
1
,
0
,
0
,
0
));
GlobalParam
globalParam
=
new
GlobalParam
();
ScheduleOperation
.
redecode
(
chromosome
,
param
.
getBaseTime
(),
globalParam
);
return
chromosome
;
}
public
Chromosome
Move
(
String
SceneId
,
int
opId
,
LocalDateTime
newStartTime
,
Long
newMachineId
)
{
GlobalParam
globalParam
=
new
GlobalParam
();
Chromosome
chromosome
=
_sceneService
.
loadChromosomeFromFile
(
SceneId
);
// WriteScheduleSummary(chromosome);
ScheduleOperationService
ScheduleOperation
=
new
ScheduleOperationService
();
ScheduleOperation
.
moveOperation
(
chromosome
,
opId
,
(
int
)
ChronoUnit
.
SECONDS
.
between
(
chromosome
.
getBaseTime
(),
newStartTime
),
newMachineId
,
globalParam
);
// WriteScheduleSummary(chromosome);
_sceneService
.
saveChromosomeToFile
(
chromosome
,
SceneId
);
return
chromosome
;
}
public
Chromosome
SpiltOperation
(
String
SceneId
,
int
opId
,
Double
[]
splitCounts
)
{
GlobalParam
globalParam
=
new
GlobalParam
();
Chromosome
chromosome
=
_sceneService
.
loadChromosomeFromFile
(
SceneId
);
//this.baseTime=param.getBaseTime();
// WriteScheduleSummary(chromosome);
ScheduleOperationService
ScheduleOperation
=
new
ScheduleOperationService
();
ScheduleOperation
.
SpiltOperation
(
chromosome
,
opId
,
splitCounts
,
globalParam
);
WriteScheduleSummary
(
chromosome
);
_sceneService
.
saveChromosomeToFile
(
chromosome
,
SceneId
);
return
chromosome
;
}
public
Chromosome
DelOperation
(
String
SceneId
,
int
opId
)
{
GlobalParam
globalParam
=
new
GlobalParam
();
Chromosome
chromosome
=
_sceneService
.
loadChromosomeFromFile
(
SceneId
);
//this.baseTime=param.getBaseTime();
// WriteScheduleSummary(chromosome);
ScheduleOperationService
ScheduleOperation
=
new
ScheduleOperationService
();
ScheduleOperation
.
DelOperation
(
chromosome
,
opId
,
globalParam
);
WriteScheduleSummary
(
chromosome
);
_sceneService
.
saveChromosomeToFile
(
chromosome
,
SceneId
);
return
chromosome
;
}
public
Chromosome
LockOperation
(
String
SceneId
,
int
opId
,
boolean
isLocked
)
{
GlobalParam
globalParam
=
new
GlobalParam
();
Chromosome
chromosome
=
_sceneService
.
loadChromosomeFromFile
(
SceneId
);
//this.baseTime=param.getBaseTime();
// WriteScheduleSummary(chromosome);
ScheduleOperationService
ScheduleOperation
=
new
ScheduleOperationService
();
LocalDateTime
ds
=
LocalDateTime
.
of
(
2025
,
12
,
7
,
23
,
59
);
ScheduleOperation
.
moveOperation
(
chromosome
,
2
,
(
int
)
ChronoUnit
.
SECONDS
.
between
(
param
.
getBaseTime
(),
ds
),
2
,
param
.
getBaseTime
()
,
globalParam
);
ScheduleOperation
.
LockOperation
(
chromosome
,
opId
,
isLocked
,
globalParam
);
WriteScheduleSummary
(
chromosome
);
//
_sceneService.saveChromosomeToFile(chromosome, SceneId);
_sceneService
.
saveChromosomeToFile
(
chromosome
,
SceneId
);
return
chromosome
;
}
public
Chromosome
schedule
(
String
SceneId
)
{
try
{
ScheduleParams
param
=
new
ScheduleParams
();
...
...
@@ -401,11 +490,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
.
collect
(
Collectors
.
toList
());
for
(
GAScheduleResult
job
:
sortedJobs
)
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
String
.
format
(
"[%d-%d]:[%s-%s] Order %d, Machine %d, Operation %d, Batch %
d, processingTime %d
"
,
"[%d-%d]:[%s-%s] Order %d, Machine %d, Operation %d, Batch %
.1f, processingTime %%.1f
"
,
job
.
getStartTime
(),
job
.
getEndTime
(),
ConvertTime
(
job
.
getStartTime
()),
...
...
@@ -437,7 +524,7 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
}
}
private
String
ConvertTime
(
int
minute
)
{
return
baseTime
.
plus
Minute
s
(
minute
).
format
(
java
.
time
.
format
.
DateTimeFormatter
.
ofPattern
(
"MM-dd HH:mm"
));
return
baseTime
.
plus
Second
s
(
minute
).
format
(
java
.
time
.
format
.
DateTimeFormatter
.
ofPattern
(
"MM-dd HH:mm"
));
}
/**
...
...
@@ -667,6 +754,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
{
entry
.
setOrderId
(
op
.
getOrderId
());
entry
.
setQuantity
(
op
.
getPlanQty
());
entry
.
setRoutingDetailId
(
op
.
getRoutingDetailId
());
entry
.
setTaskSeq
(
op
.
getTaskSeq
());
entry
.
setRoutingDetailName
(
op
.
getRoutingDetailName
());
ProdLaunchOrder
order
=
ProdLaunchOrders
.
stream
()
.
filter
(
t
->
t
.
getOrderId
().
equals
(
op
.
getOrderId
()))
.
findFirst
().
orElse
(
null
);
...
...
@@ -682,8 +772,10 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
MachineOption
mo
=
new
MachineOption
();
mo
.
setMachineId
(
e
.
getEquipId
());
mo
.
setProcessingTime
(
e
.
getSpeed
());
// mo.setContantTime(op.getConstTime());
// mo.setTeardownTime(op.getPostprocessingTime());
mo
.
setContantTime
(
op
.
getConstTime
());
mo
.
setSetupTime
(
op
.
getChangeLineTime
());
mo
.
setTeardownTime
(
op
.
getPostprocessingTime
());
mo
.
setPreTime
(
e
.
getSetupTime
());
mos
.
add
(
mo
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment