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
c925515f
Commit
c925515f
authored
Dec 27, 2025
by
Tong Li
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
遗传算法-操作后退前进
parent
d15cd28e
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
172 additions
and
11 deletions
+172
-11
Chromosome.java
src/main/java/com/aps/entity/Algorithm/Chromosome.java
+2
-0
SceneChromsome.java
src/main/java/com/aps/entity/Schedule/SceneChromsome.java
+19
-0
SceneDetail.java
src/main/java/com/aps/entity/Schedule/SceneDetail.java
+14
-0
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+16
-0
SceneService.java
src/main/java/com/aps/service/plan/SceneService.java
+118
-9
PlanResultServiceTest.java
src/test/java/com/aps/demo/PlanResultServiceTest.java
+3
-2
No files found.
src/main/java/com/aps/entity/Algorithm/Chromosome.java
View file @
c925515f
...
@@ -21,6 +21,8 @@ public class Chromosome {
...
@@ -21,6 +21,8 @@ public class Chromosome {
private
String
ID
=
UUID
.
randomUUID
().
toString
();
private
String
ID
=
UUID
.
randomUUID
().
toString
();
private
Integer
version
=
0
;
/// <summary>
/// <summary>
/// 机器选择部分(可选机器集中的顺序号)
/// 机器选择部分(可选机器集中的顺序号)
/// </summary>
/// </summary>
...
...
src/main/java/com/aps/entity/Schedule/SceneChromsome.java
0 → 100644
View file @
c925515f
package
com
.
aps
.
entity
.
Schedule
;
import
lombok.Data
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 作者:佟礼
* 时间:2025-12-26
*/
@Data
public
class
SceneChromsome
{
private
String
SceneID
;
private
Integer
Version
;
private
List
<
SceneDetail
>
SceneDetails
=
new
ArrayList
<>();
}
src/main/java/com/aps/entity/Schedule/SceneDetail.java
0 → 100644
View file @
c925515f
package
com
.
aps
.
entity
.
Schedule
;
import
lombok.Data
;
/**
* 作者:佟礼
* 时间:2025-12-26
*/
@Data
public
class
SceneDetail
{
private
Integer
version
;
private
String
fileName
;
}
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
c925515f
...
@@ -7,6 +7,7 @@ import com.aps.entity.*;
...
@@ -7,6 +7,7 @@ import com.aps.entity.*;
import
com.aps.entity.Algorithm.*
;
import
com.aps.entity.Algorithm.*
;
import
com.aps.entity.Algorithm.IDAndChildID.GroupResult
;
import
com.aps.entity.Algorithm.IDAndChildID.GroupResult
;
import
com.aps.entity.Algorithm.IDAndChildID.NodeInfo
;
import
com.aps.entity.Algorithm.IDAndChildID.NodeInfo
;
import
com.aps.entity.Schedule.SceneChromsome
;
import
com.aps.entity.basic.ScheduleChromosome
;
import
com.aps.entity.basic.ScheduleChromosome
;
import
com.aps.entity.Schedule.GenVO
;
import
com.aps.entity.Schedule.GenVO
;
import
com.aps.entity.Schedule.MachineVO
;
import
com.aps.entity.Schedule.MachineVO
;
...
@@ -574,7 +575,22 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
...
@@ -574,7 +575,22 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
//场景回退前进
public
Chromosome
moveChromosome
(
String
sceneId
,
Integer
version
)
{
return
_sceneService
.
moveChromosome
(
sceneId
,
version
);
}
//场景下所有操作版本
public
SceneChromsome
getSceneChromsome
(
String
sceneId
)
{
return
_sceneService
.
getSceneChromsome
(
sceneId
);
}
public
void
testSceneChromsome
(
String
sceneId
)
{
Chromosome
chromosome
=
new
Chromosome
();
_sceneService
.
saveChromosomeToFile
(
chromosome
,
sceneId
);
}
...
...
src/main/java/com/aps/service/plan/SceneService.java
View file @
c925515f
package
com
.
aps
.
service
.
plan
;
package
com
.
aps
.
service
.
plan
;
import
com.aps.common.util.redis.RedisUtils
;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Schedule.SceneChromsome
;
import
com.aps.entity.Schedule.SceneDetail
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.SerializationFeature
;
import
com.fasterxml.jackson.databind.SerializationFeature
;
import
com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
;
import
com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.nio.file.Files
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
/**
* SceneService.java
* SceneService.java
...
@@ -22,6 +28,8 @@ public class SceneService {
...
@@ -22,6 +28,8 @@ public class SceneService {
private
static
final
org
.
slf4j
.
Logger
logger
=
org
.
slf4j
.
LoggerFactory
.
getLogger
(
SceneService
.
class
);
private
static
final
org
.
slf4j
.
Logger
logger
=
org
.
slf4j
.
LoggerFactory
.
getLogger
(
SceneService
.
class
);
@Autowired
private
RedisUtils
redisUtils
;
// 统一配置 ObjectMapper
// 统一配置 ObjectMapper
private
ObjectMapper
createObjectMapper
()
{
private
ObjectMapper
createObjectMapper
()
{
...
@@ -58,6 +66,12 @@ public class SceneService {
...
@@ -58,6 +66,12 @@ public class SceneService {
return
new
File
(
resultDir
,
fileName
);
return
new
File
(
resultDir
,
fileName
);
}
}
private
File
getChromosomeFile
(
String
sceneId
,
String
ver
)
{
File
resultDir
=
getResultDirectory
();
String
fileName
=
"chromosome_result_"
+
sceneId
+
"_"
+
ver
+
"_.json"
;
return
new
File
(
resultDir
,
fileName
);
}
/**
/**
* 从文件中读取Chromosome对象
* 从文件中读取Chromosome对象
*/
*/
...
@@ -69,7 +83,14 @@ public class SceneService {
...
@@ -69,7 +83,14 @@ public class SceneService {
try
{
try
{
ObjectMapper
objectMapper
=
createObjectMapper
();
ObjectMapper
objectMapper
=
createObjectMapper
();
File
file
=
getChromosomeFile
(
sceneId
);
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
File
file
;
if
(
sceneChromsome
==
null
)
{
file
=
getChromosomeFile
(
sceneId
);
}
else
{
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
}
if
(!
file
.
exists
())
{
if
(!
file
.
exists
())
{
logger
.
warn
(
"染色体文件不存在: {}"
,
file
.
getAbsolutePath
());
logger
.
warn
(
"染色体文件不存在: {}"
,
file
.
getAbsolutePath
());
...
@@ -110,9 +131,46 @@ public class SceneService {
...
@@ -110,9 +131,46 @@ public class SceneService {
try
{
try
{
ObjectMapper
objectMapper
=
createObjectMapper
();
ObjectMapper
objectMapper
=
createObjectMapper
();
File
file
=
getChromosomeFile
(
sceneId
);
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
if
(
sceneChromsome
==
null
)
{
sceneChromsome
=
new
SceneChromsome
();
sceneChromsome
.
setSceneID
(
sceneId
);
sceneChromsome
.
setVersion
(
1
);
}
else
{
Integer
v
=
sceneChromsome
.
getVersion
();
// 回退后编辑,会清除后续版本,重新生成
List
<
SceneDetail
>
nexts
=
sceneChromsome
.
getSceneDetails
().
stream
()
.
filter
(
t
->
t
.
getVersion
()
>
v
)
.
collect
(
Collectors
.
toList
());
if
(
nexts
!=
null
&&
nexts
.
size
()>
0
)
{
for
(
SceneDetail
d:
nexts
)
{
File
file1
=
getChromosomeFile
(
sceneId
,
d
.
getVersion
().
toString
());
Files
.
deleteIfExists
(
file1
.
toPath
());
}
}
sceneChromsome
.
getSceneDetails
().
removeIf
(
t
->
t
.
getVersion
()
>
v
);
sceneChromsome
.
setVersion
(
sceneChromsome
.
getVersion
()
+
1
);
}
SceneDetail
sceneDetail
=
new
SceneDetail
();
sceneDetail
.
setVersion
(
sceneChromsome
.
getVersion
());
sceneChromsome
.
getSceneDetails
().
add
(
sceneDetail
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
File
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
File
tempFile
=
new
File
(
file
.
getParentFile
(),
file
.
getName
()
+
".tmp"
);
File
tempFile
=
new
File
(
file
.
getParentFile
(),
file
.
getName
()
+
".tmp"
);
chromosome
.
setVersion
(
sceneChromsome
.
getVersion
());
objectMapper
.
writeValue
(
tempFile
,
chromosome
);
objectMapper
.
writeValue
(
tempFile
,
chromosome
);
if
(
tempFile
.
length
()
==
0
)
{
if
(
tempFile
.
length
()
==
0
)
{
...
@@ -147,6 +205,30 @@ public class SceneService {
...
@@ -147,6 +205,30 @@ public class SceneService {
return
false
;
return
false
;
}
}
}
}
public
SceneChromsome
getSceneChromsome
(
String
sceneId
)
{
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
return
sceneChromsome
;
}
public
Chromosome
moveChromosome
(
String
sceneId
,
Integer
version
)
{
try
{
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
if
(
sceneChromsome
==
null
)
{
return
null
;
}
else
{
sceneChromsome
.
setVersion
(
version
);
redisUtils
.
set
(
"SceneId."
+
sceneId
,
sceneChromsome
);
return
loadChromosomeFromFile
(
sceneId
);
}
}
catch
(
Exception
e
)
{
logger
.
error
(
"回退/前进失败,场景ID: "
+
sceneId
,
e
);
return
null
;
}
}
/**
/**
* 检查染色体文件是否存在
* 检查染色体文件是否存在
...
@@ -155,7 +237,13 @@ public class SceneService {
...
@@ -155,7 +237,13 @@ public class SceneService {
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
return
false
;
return
false
;
}
}
File
file
=
getChromosomeFile
(
sceneId
);
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
File
file
;
if
(
sceneChromsome
==
null
)
{
file
=
getChromosomeFile
(
sceneId
);
}
else
{
file
=
getChromosomeFile
(
sceneId
,
sceneChromsome
.
getVersion
().
toString
());
}
return
file
.
exists
()
&&
file
.
length
()
>
0
;
return
file
.
exists
()
&&
file
.
length
()
>
0
;
}
}
...
@@ -164,7 +252,12 @@ public class SceneService {
...
@@ -164,7 +252,12 @@ public class SceneService {
*/
*/
public
boolean
deleteChromosomeFile
(
String
sceneId
)
{
public
boolean
deleteChromosomeFile
(
String
sceneId
)
{
try
{
try
{
File
file
=
getChromosomeFile
(
sceneId
);
SceneChromsome
sceneChromsome
=(
SceneChromsome
)
redisUtils
.
get
(
"SceneId."
+
sceneId
);
File
file
;
if
(
sceneChromsome
==
null
)
{
file
=
getChromosomeFile
(
sceneId
);
if
(
file
.
exists
())
{
if
(
file
.
exists
())
{
boolean
deleted
=
Files
.
deleteIfExists
(
file
.
toPath
());
boolean
deleted
=
Files
.
deleteIfExists
(
file
.
toPath
());
if
(
deleted
)
{
if
(
deleted
)
{
...
@@ -172,6 +265,22 @@ public class SceneService {
...
@@ -172,6 +265,22 @@ public class SceneService {
}
}
return
deleted
;
return
deleted
;
}
}
}
else
{
for
(
SceneDetail
d:
sceneChromsome
.
getSceneDetails
())
{
file
=
getChromosomeFile
(
sceneId
,
d
.
getVersion
().
toString
());
if
(
file
.
exists
())
{
boolean
deleted
=
Files
.
deleteIfExists
(
file
.
toPath
());
if
(
deleted
)
{
logger
.
info
(
"删除染色体文件成功: {}"
,
file
.
getAbsolutePath
());
}
}
return
true
;
}
}
return
true
;
return
true
;
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
"删除染色体文件失败,场景ID: "
+
sceneId
,
e
);
logger
.
error
(
"删除染色体文件失败,场景ID: "
+
sceneId
,
e
);
...
...
src/test/java/com/aps/demo/PlanResultServiceTest.java
View file @
c925515f
...
@@ -28,8 +28,9 @@ public class PlanResultServiceTest {
...
@@ -28,8 +28,9 @@ public class PlanResultServiceTest {
public
void
testExecute
()
{
public
void
testExecute
()
{
// planResultService.getMaterials();
// planResultService.getMaterials();
// RangeSubtractUtil.test();
// RangeSubtractUtil.test();
planResultService
.
testSceneChromsome
(
"qwerty"
);
planResultService
.
execute2
(
"8835EF6E1C8A491D99B16DE59160ED64"
);
// Chromosome chromosome= planResultService.moveChromosome("qwerty",3);
// planResultService.execute2("8835EF6E1C8A491D99B16DE59160ED64");
// planResultService.execute2("BE037838EF074B07B87D7DE763107398");
// planResultService.execute2("BE037838EF074B07B87D7DE763107398");
// LocalDateTime t= LocalDateTime.of(2025, 11, 15, 6, 51, 11);
// LocalDateTime t= LocalDateTime.of(2025, 11, 15, 6, 51, 11);
// List<Integer> opids=new ArrayList<>();
// List<Integer> opids=new ArrayList<>();
...
...
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