Skip to content

Commit 9193c19

Browse files
committed
wip
1 parent 646486a commit 9193c19

File tree

5 files changed

+38
-11
lines changed

5 files changed

+38
-11
lines changed

core/src/main/java/fr/sncf/osrd/api/ConflictDetectionEndpoint.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,15 @@ public enum ConflictType {
9090
@Json(name = "conflict_type")
9191
public final ConflictType conflictType;
9292

93-
public Conflict(Collection<Long> trainIds, double startTime, double endTime, ConflictType conflictType) {
93+
@Json(name = "requirements")
94+
public final Collection<String> requirements;
95+
96+
public Conflict(Collection<Long> trainIds, double startTime, double endTime, ConflictType conflictType, Collection<String> requirements) {
9497
this.trainIds = trainIds;
9598
this.startTime = startTime;
9699
this.endTime = endTime;
97100
this.conflictType = conflictType;
101+
this.requirements = requirements;
98102
}
99103
}
100104

core/src/main/java/fr/sncf/osrd/conflicts/Conflicts.kt

+16-9
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,12 @@ class IncrementalConflictDetectorImpl(trainRequirements: List<TrainRequirements>
171171
// look for requirement times overlaps.
172172
// as spacing requirements are exclusive, any overlap is a conflict
173173
val res = mutableListOf<Conflict>()
174-
for (requirements in spacingZoneRequirements.values) {
175-
for (conflictGroup in detectRequirementConflicts(requirements) { _, _ -> true }) {
174+
for (entry in spacingZoneRequirements) {
175+
for (conflictGroup in detectRequirementConflicts(entry.value) { _, _ -> true }) {
176176
val trains = conflictGroup.map { it.trainId }
177177
val beginTime = conflictGroup.minBy { it.beginTime }.beginTime
178178
val endTime = conflictGroup.maxBy { it.endTime }.endTime
179-
res.add(Conflict(trains, beginTime, endTime, ConflictType.SPACING))
179+
res.add(Conflict(trains, beginTime, endTime, ConflictType.SPACING, listOf(entry.key)))
180180
}
181181
}
182182
return res
@@ -185,13 +185,13 @@ class IncrementalConflictDetectorImpl(trainRequirements: List<TrainRequirements>
185185
private fun detectRoutingConflicts(): List<Conflict> {
186186
// for each zone, check compatibility of overlapping requirements
187187
val res = mutableListOf<Conflict>()
188-
for (requirements in routingZoneRequirements.values) {
188+
for (entry in routingZoneRequirements) {
189189
for (conflictGroup in
190-
detectRequirementConflicts(requirements) { a, b -> a.config != b.config }) {
190+
detectRequirementConflicts(entry.value) { a, b -> a.config != b.config }) {
191191
val trains = conflictGroup.map { it.trainId }
192192
val beginTime = conflictGroup.minBy { it.beginTime }.beginTime
193193
val endTime = conflictGroup.maxBy { it.endTime }.endTime
194-
res.add(Conflict(trains, beginTime, endTime, ConflictType.ROUTING))
194+
res.add(Conflict(trains, beginTime, endTime, ConflictType.ROUTING, listOf(entry.key)))
195195
}
196196
}
197197
return res
@@ -220,7 +220,7 @@ class IncrementalConflictDetectorImpl(trainRequirements: List<TrainRequirements>
220220
val endTime = min(req.endTime, otherReq.endTime)
221221
if (beginTime < endTime)
222222
res.add(
223-
Conflict(listOf(otherReq.trainId), beginTime, endTime, ConflictType.SPACING)
223+
Conflict(listOf(otherReq.trainId), beginTime, endTime, ConflictType.SPACING, listOf(req.zone))
224224
)
225225
}
226226

@@ -240,7 +240,7 @@ class IncrementalConflictDetectorImpl(trainRequirements: List<TrainRequirements>
240240
val endTime = min(zoneReq.endTime, otherReq.endTime)
241241
if (beginTime < endTime)
242242
res.add(
243-
Conflict(listOf(otherReq.trainId), beginTime, endTime, ConflictType.ROUTING)
243+
Conflict(listOf(otherReq.trainId), beginTime, endTime, ConflictType.ROUTING, listOf(zoneReq.zone))
244244
)
245245
}
246246
}
@@ -447,6 +447,12 @@ fun mergeMap(
447447
events.add(Event(EventType.END, conflict.endTime))
448448
}
449449

450+
// TODO
451+
val reqZones = mutableListOf<String>()
452+
for (conflict in conflicts) {
453+
reqZones.addAll(conflict.requirements);
454+
}
455+
450456
events.sort()
451457
var eventCount = 0
452458
var eventBeginning = 0.0
@@ -462,7 +468,8 @@ fun mergeMap(
462468
trainIds.toMutableList(),
463469
eventBeginning,
464470
event.time,
465-
conflictType
471+
conflictType,
472+
reqZones
466473
)
467474
)
468475
}

core/src/main/kotlin/fr/sncf/osrd/api/api_v2/conflicts/ConflictDetectionEndpointV2.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ private fun makeConflictDetectionResponse(
5252
it.trainIds,
5353
startTime.plus(Duration.ofMillis((it.startTime * 1000).toLong())),
5454
startTime.plus(Duration.ofMillis((it.endTime * 1000).toLong())),
55-
it.conflictType
55+
it.conflictType,
56+
// TODO
57+
listOf(ConflictRequirement(listOf(), it.requirements))
5658
)
5759
}
5860
)

core/src/main/kotlin/fr/sncf/osrd/api/api_v2/conflicts/ConflictDetectionResponse.kt

+6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ class Conflict(
1818
@Json(name = "end_time") val endTime: ZonedDateTime,
1919
@Json(name = "conflict_type")
2020
val conflictType: ConflictDetectionEndpoint.ConflictDetectionResult.Conflict.ConflictType,
21+
@Json(name = "requirements") val requirements: Collection<ConflictRequirement>,
22+
)
23+
24+
class ConflictRequirement(
25+
@Json(name = "time_range") val timeRange: Collection<Int>,
26+
@Json(name = "zones") val zones: Collection<String>,
2127
)
2228

2329
val conflictResponseAdapter: JsonAdapter<ConflictDetectionResponse> =

editoast/src/core/v2/conflict_detection.rs

+8
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use super::simulation::SpacingRequirement;
1313
editoast_common::schemas! {
1414
ConflictDetectionResponse,
1515
Conflict,
16+
ConflictRequirement,
1617
}
1718

1819
#[derive(Debug, Serialize)]
@@ -48,6 +49,13 @@ pub struct Conflict {
4849
/// Type of the conflict
4950
#[schema(inline)]
5051
pub conflict_type: ConflictType,
52+
pub requirements: Vec<ConflictRequirement>,
53+
}
54+
55+
#[derive(Debug, Clone, Deserialize, Serialize, ToSchema)]
56+
pub struct ConflictRequirement {
57+
pub time_range: Vec<i64>,
58+
pub zones: Vec<String>,
5159
}
5260

5361
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema)]

0 commit comments

Comments
 (0)