Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
traffic-signal-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
jinan
traffic-signal-platform
Commits
eddbe1cc
Commit
eddbe1cc
authored
Apr 27, 2025
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 优化计算算法
parent
c85b4a40
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
44 additions
and
30 deletions
+44
-30
HisenseGreenChartTask.java
...c/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
+44
-30
No files found.
signal-optimize-data-compute/src/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
View file @
eddbe1cc
...
...
@@ -93,6 +93,9 @@ public class HisenseGreenChartTask {
// 1.根据绿波带长度和速度计算行程时间
// 2.根据相位差,行程时间,海信环图计算绿灯红灯点位 正向 crossRedTimesMap 反向backCrossRedTimesMap
// todo test
//List<GreenCrossDirDTO> collect = greenCrossDirCache.stream().filter(dto -> dto.getGreenId() == 1).collect(Collectors.toList());
Map
<
Integer
,
List
<
GreenCrossDirDTO
>>
greenMap
=
greenCrossDirCache
.
stream
().
collect
(
Collectors
.
groupingBy
(
GreenCrossDirDTO:
:
getGreenId
));
List
<
GreenBeltChartDTO
>
greenBeltChartDTOS
=
new
ArrayList
<>();
for
(
Map
.
Entry
<
Integer
,
List
<
GreenCrossDirDTO
>>
entry
:
greenMap
.
entrySet
())
{
...
...
@@ -219,7 +222,7 @@ public class HisenseGreenChartTask {
Map
<
String
,
List
<
List
<
Double
>>>
greenStartMap
=
new
LinkedHashMap
<>();
List
<
List
<
Double
>>
firstGreenStartList
=
new
ArrayList
<>();
List
<
List
<
Double
>>
secondGreenStartList
=
new
ArrayList
<>();
List
<
Double
>
firstStartEndList
=
new
ArrayList
<>();
GreenCrossDirDTO
firstDto
=
value
.
get
(
i
);
String
firstCrossId
=
firstDto
.
getCrossId
();
Integer
inCrossDir
=
null
;
...
...
@@ -248,7 +251,8 @@ public class HisenseGreenChartTask {
}
if
(
2
==
type
)
{
beltDir
=
greenBeltChartDTO
.
getBackDir
();
}
}
}
}
if
(
Objects
.
equals
(
greenId
,
beltGreenId
)
&&
Objects
.
equals
(
inCrossDir
,
beltDir
))
{
Double
travelTime
=
getTravelTime
(
i
,
greenBeltChartDTO
,
type
);
Map
<
String
,
List
<
List
<
Double
>>>
crossGreenTimesMap
=
null
;
...
...
@@ -266,11 +270,6 @@ public class HisenseGreenChartTask {
List
<
Double
>
greenStartEnd
=
firstList
.
get
(
i1
);
Double
greenStart
=
greenStartEnd
.
get
(
0
);
Double
greenEnd
=
greenStartEnd
.
get
(
1
);
int
index
=
0
;
Double
start
=
0.0
;
Double
end
=
0.0
;
Double
start2
=
0.0
;
Double
end2
=
0.0
;
for
(
int
j
=
greenStart
.
intValue
();
j
<=
greenEnd
.
intValue
();
j
++)
{
int
firstStartPoint
=
j
+
travelTime
.
intValue
();
for
(
int
i3
=
0
;
i3
<
secondList
.
size
();
i3
++)
{
...
...
@@ -281,26 +280,36 @@ public class HisenseGreenChartTask {
if
(
greenStart
<=
j
&&
j
<=
greenEnd
&&
greenStart2
<=
firstStartPoint
&&
firstStartPoint
<=
greenEnd2
)
{
if
(
index
==
0
)
{
start
=
j
*
1.0
;
start2
=
firstStartPoint
*
1.0
;
}
else
{
Double
tempEnd
=
j
*
1.0
;
end
=
end
>
tempEnd
?
end
:
tempEnd
;
Double
tempEnd2
=
firstStartPoint
*
1.0
;
end2
=
end2
>
tempEnd2
?
end2
:
tempEnd2
;
}
++
index
;
Double
temp
=
j
*
1.0
;
firstStartEndList
.
add
(
temp
);
}
}
}
firstGreenStartList
.
add
(
Arrays
.
asList
(
start
,
end
));
secondGreenStartList
.
add
(
Arrays
.
asList
(
start2
,
end2
));
}
}
if
(!
CollectionUtils
.
isEmpty
(
firstStartEndList
))
{
Double
start
=
firstStartEndList
.
get
(
0
);
Double
end
=
firstStartEndList
.
get
(
0
);
for
(
int
k
=
1
;
k
<
firstStartEndList
.
size
();
k
++)
{
Double
next
=
firstStartEndList
.
get
(
k
);
Double
prev
=
firstStartEndList
.
get
(
k
-
1
);
if
(
next
-
prev
==
1.0
)
{
end
=
firstStartEndList
.
get
(
k
);
if
(
k
+
1
==
firstStartEndList
.
size
())
{
firstGreenStartList
.
add
(
Arrays
.
asList
(
start
,
end
));
secondGreenStartList
.
add
(
Arrays
.
asList
(
start
+
travelTime
.
intValue
(),
end
+
travelTime
.
intValue
()));
}
}
else
{
firstGreenStartList
.
add
(
Arrays
.
asList
(
start
,
end
));
secondGreenStartList
.
add
(
Arrays
.
asList
(
start
+
travelTime
.
intValue
(),
end
+
travelTime
.
intValue
()));
start
=
firstStartEndList
.
get
(
k
);
end
=
firstStartEndList
.
get
(
k
);
}
}
}
greenStartMap
.
put
(
firstCrossId
,
firstGreenStartList
);
greenStartMap
.
put
(
secondCrossId
,
secondGreenStartList
);
}
greenStartMap
.
put
(
firstCrossId
,
firstGreenStartList
);
greenStartMap
.
put
(
secondCrossId
,
secondGreenStartList
);
}
}
greenwaveStartGroup
.
add
(
greenStartMap
);
...
...
@@ -373,20 +382,23 @@ public class HisenseGreenChartTask {
// 绿灯时间
crossGreenTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenStartTime
,
cycleIndex
+
offset
+
greenEndTime
));
}
else
if
(
i
>
0
&&
i
<
cycleSum
)
{
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenEndTime
,
cycle
Index
*
(
i
+
1
)
+
offset
));
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenEndTime
,
cycle
Len
*
(
i
+
1
)
+
offset
));
// 绿灯时间
crossGreenTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenStartTime
,
cycleIndex
+
offset
+
greenEndTime
));
}
else
if
(
i
==
cycleSum
)
{
// a最后一个周期补充相位差
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenEndTime
,
cycleIndex
+
offset
+
endCycleExt
));
// 绿灯时间
if
(
greenStartTime
>
endCycleExt
)
{
//crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + endCycleExt));
}
else
{
if
(
endCycleExt
<=
greenStartTime
)
{
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
,
cycleIndex
+
offset
+
endCycleExt
));
}
else
if
(
greenStartTime
<=
endCycleExt
&&
endCycleExt
<=
greenEndTime
)
{
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
,
cycleIndex
+
offset
+
greenStartTime
));
crossGreenTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenStartTime
,
cycleIndex
+
offset
+
endCycleExt
));
}
else
{
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
,
cycleIndex
+
offset
+
greenStartTime
));
crossGreenTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenStartTime
,
cycleIndex
+
offset
+
greenEndTime
));
crossGreenTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenEndTime
,
cycleIndex
+
offset
+
endCycleExt
));
}
}
}
else
{
// 红灯结束时间 < 相位差, 相位差包含绿灯,endCycleExt都是红灯
// 相位差中绿灯时间
if
(
i
==
0
)
{
...
...
@@ -401,7 +413,7 @@ public class HisenseGreenChartTask {
crossGreenTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenStartTime
,
cycleIndex
+
offset
+
greenEndTime
));
}
else
if
(
i
>
0
&&
i
<
cycleSum
)
{
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
,
cycleIndex
+
offset
+
greenStartTime
));
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenEndTime
,
cycle
Index
*
(
i
+
1
)
+
offset
));
crossRedTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenEndTime
,
cycle
Len
*
(
i
+
1
)
+
offset
));
// 绿灯时间
crossGreenTimes
.
add
(
Arrays
.
asList
(
cycleIndex
+
offset
+
greenStartTime
,
cycleIndex
+
offset
+
greenEndTime
));
}
...
...
@@ -466,7 +478,8 @@ public class HisenseGreenChartTask {
if
(
StringUtils
.
isBlank
(
str
))
{
continue
;
}
List
<
RingPhaseInfoDTO
>
ringPhaseInfoDTOS
=
mapper
.
readValue
(
str
,
new
TypeReference
<
List
<
RingPhaseInfoDTO
>>()
{});
List
<
RingPhaseInfoDTO
>
ringPhaseInfoDTOS
=
mapper
.
readValue
(
str
,
new
TypeReference
<
List
<
RingPhaseInfoDTO
>>()
{
});
// 遍历绿波路口协调方向
if
(
StringUtils
.
isNotBlank
(
greenDirStr
))
{
String
[]
greenDirArray
=
greenDirStr
.
split
(
","
);
...
...
@@ -543,7 +556,8 @@ public class HisenseGreenChartTask {
String
dir
=
entity
.
getDir
();
Integer
inDir
=
GreenBeltDirEnum
.
getInDir
(
dir
);
Double
greenWidthTime
=
entity
.
getGreenWidthTime
();
List
<
GreenBeltInfoVO
.
CrossGreenDetail
>
crossGreenDetailList
=
mapper
.
readValue
(
crossGreenDetail
,
new
TypeReference
<
List
<
GreenBeltInfoVO
.
CrossGreenDetail
>>()
{});
List
<
GreenBeltInfoVO
.
CrossGreenDetail
>
crossGreenDetailList
=
mapper
.
readValue
(
crossGreenDetail
,
new
TypeReference
<
List
<
GreenBeltInfoVO
.
CrossGreenDetail
>>()
{
});
if
(!
CollectionUtils
.
isEmpty
(
crossGreenDetailList
))
{
// 默认神思优化方案100,相位101
int
index
=
100
;
...
...
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