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
15136f5f
Commit
15136f5f
authored
Jan 16, 2026
by
Tong Li
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug
parent
f1da4f73
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
34 additions
and
34 deletions
+34
-34
GeneticAlgorithm.java
...main/java/com/aps/service/Algorithm/GeneticAlgorithm.java
+8
-0
GeneticDecoder.java
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
+18
-28
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+2
-0
PlanResultServiceTest.java
src/test/java/com/aps/demo/PlanResultServiceTest.java
+6
-6
No files found.
src/main/java/com/aps/service/Algorithm/GeneticAlgorithm.java
View file @
15136f5f
...
@@ -125,6 +125,14 @@ public class GeneticAlgorithm {
...
@@ -125,6 +125,14 @@ public class GeneticAlgorithm {
if
(
population
.
size
()<
param
.
getTournamentSize
())
if
(
population
.
size
()<
param
.
getTournamentSize
())
{
{
best
.
setBaseTime
(
param
.
getBaseTime
());
best
.
setOrderMaterials
(
orderMaterials
);
best
.
setOperatRel
(
_entryRel
);
if
(
best
.
getInitMachines
()==
null
)
{
best
.
setInitMachines
(
ProductionDeepCopyUtil
.
deepCopyList
(
machines
,
Machine
.
class
));
}
LocalDateTime
endtime1
=
LocalDateTime
.
now
();
LocalDateTime
endtime1
=
LocalDateTime
.
now
();
FileHelper
.
writeLogFile
(
String
.
format
(
"排产-------总方案数%d----结束---%s----耗时%d----"
,
population
.
size
(),
allOperations
.
get
(
0
).
getSceneId
(),
DateTimeUtil
.
diffDuration
(
starttime
,
endtime1
).
getSeconds
())
);
FileHelper
.
writeLogFile
(
String
.
format
(
"排产-------总方案数%d----结束---%s----耗时%d----"
,
population
.
size
(),
allOperations
.
get
(
0
).
getSceneId
(),
DateTimeUtil
.
diffDuration
(
starttime
,
endtime1
).
getSeconds
())
);
return
best
;
return
best
;
...
...
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
View file @
15136f5f
...
@@ -382,6 +382,8 @@ if(finishedOrder==null||finishedOrder.size()==0)
...
@@ -382,6 +382,8 @@ if(finishedOrder==null||finishedOrder.size()==0)
int
teardownTime
=
machineOption
.
getTeardownTime
();
int
teardownTime
=
machineOption
.
getTeardownTime
();
int
preTime
=
machineOption
.
getPreTime
();
int
preTime
=
machineOption
.
getPreTime
();
int
setupTime
=
calculateSetupTime
(
chromosome
.
getResult
(),
operation
,
machine
,
machineOption
);
int
setupTime
=
calculateSetupTime
(
chromosome
.
getResult
(),
operation
,
machine
,
machineOption
);
...
@@ -393,29 +395,6 @@ if(finishedOrder==null||finishedOrder.size()==0)
...
@@ -393,29 +395,6 @@ if(finishedOrder==null||finishedOrder.size()==0)
// 确定任务的最早开始时间(基于前一道工序的完整结束时间,包含后处理)
// 确定任务的最早开始时间(基于前一道工序的完整结束时间,包含后处理)
int
earliestStartTime
=
prevOperationEndTime
;
int
earliestStartTime
=
prevOperationEndTime
;
// 检查设备上是否有前一个任务
GAScheduleResult
lastGeneOnMachine
=
chromosome
.
getResult
().
stream
()
.
filter
(
g
->
g
.
getMachineId
()
==
machine
.
getId
())
.
max
(
Comparator
.
comparingInt
(
GAScheduleResult:
:
getEndTime
))
.
orElse
(
null
);
if
(
lastGeneOnMachine
!=
null
)
{
int
machineAvailableTime
=
lastGeneOnMachine
.
getEndTime
();
if
(
setupTime
>
0
)
{
if
(
_globalParam
.
is_smoothSetup
())
{
machineAvailableTime
+=
setupTime
;
// 平滑模式:换型在非工作时间进行,不额外占用设备时间
// System.out.println(" 平滑模式换型:在非工作时间进行,设备可用时间不变");
}
else
{
// 标准模式:换型需要额外占用设备时间
machineAvailableTime
+=
setupTime
;
// System.out.println(" 标准模式换型:需要额外占用设备 " + setupTime + " 分钟");
}
}
earliestStartTime
=
Math
.
max
(
earliestStartTime
,
machineAvailableTime
);
}
// System.out.println(" 最终最早开始时间: " + earliestStartTime +
// System.out.println(" 最终最早开始时间: " + earliestStartTime +
// " (前序工序结束含后处理: " + prevOperationEndTime + ", 设备可用: " +
// " (前序工序结束含后处理: " + prevOperationEndTime + ", 设备可用: " +
...
@@ -442,7 +421,6 @@ if(finishedOrder==null||finishedOrder.size()==0)
...
@@ -442,7 +421,6 @@ if(finishedOrder==null||finishedOrder.size()==0)
CopyOnWriteArrayList
<
ScheduleResultDetail
>
geneDetails
=
machineCalculator
.
getNextAvailableTime
(
machine
,
earliestStartTime
,
-
1
,
CopyOnWriteArrayList
<
ScheduleResultDetail
>
geneDetails
=
machineCalculator
.
getNextAvailableTime
(
machine
,
earliestStartTime
,
-
1
,
processingTimeTotal
,
chromosome
.
getResult
(),
operation
.
IsInterrupt
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
);
processingTimeTotal
,
chromosome
.
getResult
(),
operation
.
IsInterrupt
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
);
...
@@ -457,11 +435,22 @@ if(finishedOrder==null||finishedOrder.size()==0)
...
@@ -457,11 +435,22 @@ if(finishedOrder==null||finishedOrder.size()==0)
.
mapToInt
(
ScheduleResultDetail:
:
getEndTime
)
.
mapToInt
(
ScheduleResultDetail:
:
getEndTime
)
.
max
()
.
max
()
.
orElse
(
0
);
.
orElse
(
0
);
//换型时间是否占用设备加工时间
//10:00 开始上班 前面的任务:24:00 结束 开始换型 休息时间 10小时
// 换型时间 12小时
// 换型时间 - 中间休息时间 =2小时
//开工时间需往后延 2小时
// 冲突检测和解决
//设置时间平滑
final
int
finalStartTime
=
startTime
;
//前处理,准备工时 是否可以在前序未完工就开始时间, 就是
final
int
finalEndTime
=
endTime
;
// 冲突检测和解决
final
int
finalStartTime
=
startTime
;
//10:00 12
final
int
finalEndTime
=
endTime
;
//15:00
// 7:00-9:00 1
//7:00-11:00 2
// 10<9&&15>7 1
// 10<11&&15>7 2 有任务
GAScheduleResult
conflictingGene
=
chromosome
.
getResult
().
stream
()
GAScheduleResult
conflictingGene
=
chromosome
.
getResult
().
stream
()
.
filter
(
g
->
g
.
getMachineId
()
==
machine
.
getId
())
.
filter
(
g
->
g
.
getMachineId
()
==
machine
.
getId
())
.
filter
(
g
->
(
finalStartTime
<
g
.
getEndTime
()
&&
finalEndTime
>
g
.
getStartTime
()))
.
filter
(
g
->
(
finalStartTime
<
g
.
getEndTime
()
&&
finalEndTime
>
g
.
getStartTime
()))
...
@@ -470,7 +459,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
...
@@ -470,7 +459,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
if
(
conflictingGene
!=
null
)
{
if
(
conflictingGene
!=
null
)
{
// System.out.println(" ⚠️ 检测到时间冲突,重新调度");
// System.out.println(" ⚠️ 检测到时间冲突,重新调度");
int
conflictSetupStartTime
=
conflictingGene
.
getEndTime
();
int
conflictSetupStartTime
=
conflictingGene
.
getEndTime
();
//11:00
int
conflictSetupTime
=
calculateSetupTimeForConflict
(
chromosome
.
getResult
(),
operation
,
machine
,
machineOption
,
conflictingGene
);
int
conflictSetupTime
=
calculateSetupTimeForConflict
(
chromosome
.
getResult
(),
operation
,
machine
,
machineOption
,
conflictingGene
);
int
conflictEarliestStartTime
=
conflictSetupStartTime
+
conflictSetupTime
;
int
conflictEarliestStartTime
=
conflictSetupStartTime
+
conflictSetupTime
;
...
@@ -843,6 +832,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
...
@@ -843,6 +832,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
return
baseTime
.
plusSeconds
(
minute
).
format
(
java
.
time
.
format
.
DateTimeFormatter
.
ofPattern
(
"YYYY-MM-dd HH:mm"
));
return
baseTime
.
plusSeconds
(
minute
).
format
(
java
.
time
.
format
.
DateTimeFormatter
.
ofPattern
(
"YYYY-MM-dd HH:mm"
));
}
}
private
int
calculateSetupTime
(
List
<
GAScheduleResult
>
existingGenes
,
Entry
operation
,
Machine
machine
,
MachineOption
machineOption
)
{
private
int
calculateSetupTime
(
List
<
GAScheduleResult
>
existingGenes
,
Entry
operation
,
Machine
machine
,
MachineOption
machineOption
)
{
GAScheduleResult
lastGeneOnMachine
=
existingGenes
.
stream
()
GAScheduleResult
lastGeneOnMachine
=
existingGenes
.
stream
()
.
filter
(
g
->
g
.
getMachineId
()
==
machine
.
getId
())
.
filter
(
g
->
g
.
getMachineId
()
==
machine
.
getId
())
.
max
(
Comparator
.
comparingInt
(
GAScheduleResult:
:
getEndTime
))
.
max
(
Comparator
.
comparingInt
(
GAScheduleResult:
:
getEndTime
))
...
...
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
15136f5f
...
@@ -550,6 +550,8 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
...
@@ -550,6 +550,8 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
{
{
Chromosome
chromosome
=
_sceneService
.
loadChromosomeFromFile
(
SceneId
);
Chromosome
chromosome
=
_sceneService
.
loadChromosomeFromFile
(
SceneId
);
ScheduleOperationService
ScheduleOperation
=
new
ScheduleOperationService
();
ScheduleOperationService
ScheduleOperation
=
new
ScheduleOperationService
();
WriteScheduleSummary
(
chromosome
);
GlobalParam
globalParam
=
new
GlobalParam
();
GlobalParam
globalParam
=
new
GlobalParam
();
ScheduleOperation
.
redecode
(
chromosome
,
chromosome
.
getBaseTime
(),
globalParam
);
ScheduleOperation
.
redecode
(
chromosome
,
chromosome
.
getBaseTime
(),
globalParam
);
WriteScheduleSummary
(
chromosome
);
WriteScheduleSummary
(
chromosome
);
...
...
src/test/java/com/aps/demo/PlanResultServiceTest.java
View file @
15136f5f
...
@@ -37,14 +37,14 @@ public class PlanResultServiceTest {
...
@@ -37,14 +37,14 @@ public class PlanResultServiceTest {
// NSGAIIUtils nsgaiiUtils=new NSGAIIUtils();
// NSGAIIUtils nsgaiiUtils=new NSGAIIUtils();
// nsgaiiUtils.Test();
// nsgaiiUtils.Test();
//
planResultService.execute2("C5FB5EF2A7334A0A92F826F4937E1008");
planResultService
.
execute2
(
"C5FB5EF2A7334A0A92F826F4937E1008"
);
// planResultService.execute2("726D4C1A712B4B1393175BD44B775B66");
// planResultService.execute2("726D4C1A712B4B1393175BD44B775B66");
// planResultService.execute2("265F24B6DF3C40E4B17D193B0CC8AAF2");
// planResultService.execute2("265F24B6DF3C40E4B17D193B0CC8AAF2");
LocalDateTime
t
=
LocalDateTime
.
of
(
2026
,
02
,
14
,
1
,
25
,
52
);
//
LocalDateTime t= LocalDateTime.of(2026, 02, 14, 1, 25, 52);
List
<
Integer
>
opids
=
new
ArrayList
<>();
//BCA6FA43FFA444D3952CF8F6E1EA291B
//
List<Integer> opids=new ArrayList<>();//BCA6FA43FFA444D3952CF8F6E1EA291B
opids
.
add
(
9
);
//
opids.add(9);
planResultService
.
Move
(
"27065EA0ECD14A81B7FAAFEF52273F93"
,
opids
,
t
,
1265
l
,
0
);
//
planResultService.Move("27065EA0ECD14A81B7FAAFEF52273F93",opids,t,1265l,0);
// planResultService.Redecode("12345679
");
// planResultService.Redecode("27065EA0ECD14A81B7FAAFEF52273F93
");
// MaintenanceWindow maintenanceWindow=new MaintenanceWindow();
// MaintenanceWindow maintenanceWindow=new MaintenanceWindow();
// maintenanceWindow.setStartTime(LocalDateTime.of(2025, 10, 21, 0, 0, 0));
// maintenanceWindow.setStartTime(LocalDateTime.of(2025, 10, 21, 0, 0, 0));
// maintenanceWindow.setEndTime(LocalDateTime.of(2025, 10, 31, 0, 0, 0));
// maintenanceWindow.setEndTime(LocalDateTime.of(2025, 10, 31, 0, 0, 0));
...
...
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