Skip to content

Commit 4477954

Browse files
authored
feat: network-modes argument supported in CreateDrtVehicles (#250)
1 parent 689746b commit 4477954

1 file changed

Lines changed: 10 additions & 12 deletions

File tree

core/src/main/java/org/eqasim/core/simulation/modes/drt/utils/CreateDrtVehicles.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@
1414

1515
import java.io.File;
1616
import java.io.IOException;
17-
import java.util.ArrayList;
18-
import java.util.List;
19-
import java.util.Optional;
20-
import java.util.Random;
17+
import java.util.*;
2118
import java.util.stream.Collectors;
19+
import java.util.stream.Stream;
2220

2321
public class CreateDrtVehicles {
2422
private final static Logger logger = LogManager.getLogger(CreateDrtVehicles.class);
@@ -30,7 +28,7 @@ public static void main(String[] args) throws CommandLine.ConfigurationException
3028
.requireOptions("network-path", "output-vehicles-path", "vehicles-number")
3129
.allowOptions("vehicles-capacity", "service-begin-time", "service-end-time", "vehicle-id-prefix")
3230
.allowOptions("random-seed")
33-
.allowOptions("service-area-path")
31+
.allowOptions("service-area-path", "network-modes")
3432
.build();
3533
int vehiclesNumber = Integer.parseInt(cmd.getOptionStrict("vehicles-number"));
3634
int vehiclesCapacity = cmd.hasOption("vehicles-capacity") ? Integer.parseInt(cmd.getOptionStrict("vehicles-capacity")) : 4;
@@ -39,17 +37,17 @@ public static void main(String[] args) throws CommandLine.ConfigurationException
3937
long randomSeed = cmd.hasOption("random-seed") ? Long.parseLong(cmd.getOptionStrict("random-seed")) : DEFAULT_RANDOM_SEED;
4038
String vehicleIdPrefx = cmd.getOption("vehicle-id-prefix").orElse("vehicle_drt_");
4139
String serviceArea = cmd.getOption("service-area-path").orElse(null);
40+
Set<String> networkModes = cmd.hasOption("network-modes") ? Arrays.stream(cmd.getOptionStrict("network-modes").split(",")).map(String::trim).collect(Collectors.toSet()) : Set.of("car");
4241
Network network = NetworkUtils.createNetwork();
4342
new MatsimNetworkReader(network).readFile(cmd.getOptionStrict("network-path"));
44-
List<Id<Link>> linksIds;
43+
Stream<? extends Link> linkStream = network.getLinks().values().stream();
4544
if(serviceArea != null) {
4645
ScenarioExtent extent = new ShapeScenarioExtent.Builder(new File(serviceArea), Optional.empty(), Optional.empty()).build();
47-
linksIds = network.getLinks().values().stream()
48-
.filter(link -> extent.isInside(link.getFromNode().getCoord()) || extent.isInside(link.getToNode().getCoord()))
49-
.map(Link::getId)
50-
.collect(Collectors.toList());
51-
} else {
52-
linksIds = new ArrayList<>(network.getLinks().keySet());
46+
linkStream = linkStream.filter(link -> extent.isInside(link.getFromNode().getCoord()) || extent.isInside(link.getToNode().getCoord()));
47+
}
48+
List<Id<Link>> linksIds = linkStream.filter(link -> link.getAllowedModes().stream().anyMatch(networkModes::contains)).map(Link::getId).toList();
49+
if(linksIds.size() == 0) {
50+
throw new IllegalStateException("No matching links to sample from");
5351
}
5452
Random random = new Random(randomSeed);
5553
FleetSpecification fleetSpecification = new FleetSpecificationImpl();

0 commit comments

Comments
 (0)