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
d073b166
Commit
d073b166
authored
May 13, 2026
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor JIT backward changeover scheduling
parent
b1b2a85e
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1162 additions
and
30 deletions
+1162
-30
ScheduleResultDetail.java
...n/java/com/aps/entity/Algorithm/ScheduleResultDetail.java
+2
-0
BackwardChangeoverHelper.java
...a/com/aps/service/Algorithm/BackwardChangeoverHelper.java
+931
-0
GeneticDecoder.java
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
+39
-29
MachineCalculator.java
...ain/java/com/aps/service/Algorithm/MachineCalculator.java
+190
-1
No files found.
src/main/java/com/aps/entity/Algorithm/ScheduleResultDetail.java
View file @
d073b166
...
...
@@ -18,6 +18,8 @@ public class ScheduleResultDetail {
private
double
Quantity
;
// 时间段
private
double
efficiency
=
1
;
//效率
private
List
<
TimeSegment
>
usedSegment
;
// true 表示换型段,false 表示加工段。
private
boolean
setup
;
// Key 的 getter/setter
...
...
src/main/java/com/aps/service/Algorithm/BackwardChangeoverHelper.java
0 → 100644
View file @
d073b166
This diff is collapsed.
Click to expand it.
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
View file @
d073b166
...
...
@@ -1297,40 +1297,48 @@ public class GeneticDecoder {
lastGeneOnMachine
=
machineTasks
.
get
(
machineTasks
.
size
()-
1
);
}
BackwardChangeoverHelper
backwardChangeoverHelper
=
new
BackwardChangeoverHelper
(
_globalParam
,
baseTime
,
machineCalculator
);
// 下面开始生成正式的 geneDetails。
// 与 buildMachinePreview 的区别是:这里得到的结果会继续向下写入 GAScheduleResult,成为真正排程结果。
//if (_globalParam.is_smoothChangeOver()) {
if
(
false
)
{
//是否考虑换型时间
Map
<
Integer
,
Object
>
reslte
=
calculateSetupTime
(
lastGeneOnMachine
,
operation
,
machine
,
earliestStartTime
,
processingTimeTotal
,
_globalParam
.
is_smoothChangeOverInWeek
(),
chromosome
.
getAllOperations
());
setupTime
=(
int
)
reslte
.
get
(
1
);
//换型时间
int
setupStartTime
=(
int
)
reslte
.
get
(
2
);
//换型开始时间
//earliestStartTime=(int)reslte.get(3);//上个任务的结束时间
earliestStartTime
=(
int
)
reslte
.
get
(
4
);
//最早开工时间
processingTimeTotal
=(
int
)
reslte
.
get
(
5
);
//processingTimeTotal
if
(
setupTime
==
0
)
{
if
(
true
)
{
if
(
isJit
)
{
BackwardChangeoverHelper
.
JitBackwardScheduleResult
backwardResult
=
backwardChangeoverHelper
.
scheduleJitBackwardWithChangeover
(
machine
,
operation
,
earliestStartTime
,
processingTimeTotal
,
processingTime
,
machineTasks
,
chromosome
.
getAllOperations
());
geneDetails
=
backwardResult
.
getGeneDetails
();
setupTime
=
backwardResult
.
getSetupTime
();
}
else
{
// 非 JIT 正排 + 考虑换型:沿用原来的正排换型逻辑。
Map
<
Integer
,
Object
>
reslte
=
calculateSetupTime
(
lastGeneOnMachine
,
operation
,
machine
,
earliestStartTime
,
processingTimeTotal
,
_globalParam
.
is_smoothChangeOverInWeek
(),
chromosome
.
getAllOperations
());
setupTime
=
(
int
)
reslte
.
get
(
1
);
//换型时间
int
setupStartTime
=
(
int
)
reslte
.
get
(
2
);
//换型开始时间
earliestStartTime
=
(
int
)
reslte
.
get
(
4
);
//最早开工时间
processingTimeTotal
=
(
int
)
reslte
.
get
(
5
);
//processingTimeTotal
if
(
setupTime
==
0
)
{
geneDetails
=
machineCalculator
.
getNextAvailableTime
(
machine
,
operation
,
earliestStartTime
,
-
1
,
processingTimeTotal
,
machineTasks
,
operation
.
getIsInterrupt
()!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
,
isJit
);
}
else
{
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
(
CopyOnWriteArrayList
<
TimeSegment
>)
reslte
.
get
(
6
);
Map
<
Integer
,
Object
>
result
=
machineCalculator
.
CreateScheduleResult
(
machine
,
operation
,
processingTimeTotal
,
earliestStartTime
,
AvailableTimeSegment
,
processingTime
,
operation
.
getQuantity
(),
operation
.
getIsInterrupt
()
!=
1
,
setupTime
,
_globalParam
.
is_smoothChangeOverInWeek
(),
setupStartTime
,
isJit
);
setupTime
=(
int
)
result
.
get
(
1
);
processingTimeTotal
,
machineTasks
,
operation
.
getIsInterrupt
()
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
,
isJit
);
}
else
{
CopyOnWriteArrayList
<
TimeSegment
>
AvailableTimeSegment
=
(
CopyOnWriteArrayList
<
TimeSegment
>)
reslte
.
get
(
6
);
Map
<
Integer
,
Object
>
result
=
machineCalculator
.
CreateScheduleResult
(
machine
,
operation
,
processingTimeTotal
,
earliestStartTime
,
AvailableTimeSegment
,
processingTime
,
operation
.
getQuantity
(),
operation
.
getIsInterrupt
()
!=
1
,
setupTime
,
_globalParam
.
is_smoothChangeOverInWeek
(),
setupStartTime
,
isJit
);
setupTime
=
(
int
)
result
.
get
(
1
);
operation
.
setChangeLineTime
(
setupTime
);
geneDetails
=
(
CopyOnWriteArrayList
<
ScheduleResultDetail
>)
result
.
get
(
2
);
geneDetails
=
(
CopyOnWriteArrayList
<
ScheduleResultDetail
>)
result
.
get
(
2
);
}
}
else
{
}
}
else
{
// 不考虑换型:是否倒排由 isJit 参数交给 MachineCalculator 控制。
geneDetails
=
machineCalculator
.
getNextAvailableTime
(
machine
,
operation
,
earliestStartTime
,
-
1
,
processingTimeTotal
,
machineTasks
,
operation
.
getIsInterrupt
()
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
,
isJit
);
processingTimeTotal
,
machineTasks
,
operation
.
getIsInterrupt
()
!=
1
,
true
,
processingTime
,
operation
.
getQuantity
(),
true
,
isJit
);
}
// FileHelper.writeLogFile(" 开始 "+operation.getGroupId()+" : "+operation.getId()+",处理时间: " + processingTime + ", 后处理: " + teardownTime +
// ", 前处理: " + preTime + ", 换型: " + setupTime+ ", 数量: " + operation.getQuantity()+ ", 设备: "+machine.getId()+ ", 是否可中断: "+operation.getIsInterrupt());
...
...
@@ -2593,6 +2601,8 @@ if(geneDetails!=null&&geneDetails.size()>0)
private
String
ConvertTime
(
int
minute
)
{
return
baseTime
.
plusSeconds
(
minute
).
format
(
java
.
time
.
format
.
DateTimeFormatter
.
ofPattern
(
"YYYY-MM-dd HH:mm"
));
}
private
Map
<
Integer
,
Object
>
calculateSetupTime
(
GAScheduleResult
lastGeneOnMachine
,
Entry
operation
,
Machine
machine
,
int
earliestStartTime
,
int
processingTimeTotal
,
boolean
changeOverInWeek
,
List
<
Entry
>
allOperations
)
{
Map
<
Integer
,
Object
>
reslte
=
new
HashMap
<>();
...
...
src/main/java/com/aps/service/Algorithm/MachineCalculator.java
View file @
d073b166
This diff is collapsed.
Click to expand it.
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