Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
600e6e1
noise feedback initial commit
nkuehnel Oct 31, 2019
b410c5e
updates on noise feedback
nkuehnel Oct 31, 2019
ac2f0d4
noise feedback works for test case now
nkuehnel Nov 4, 2019
a64d79e
updates on noise feedback
nkuehnel Nov 6, 2019
8acf1f3
updates on noise feedback, add relocation strategy
nkuehnel Nov 6, 2019
46bcb0e
Merge branch 'cllorca_branch' into noiseFeedback
nkuehnel Nov 6, 2019
d128945
updates on noise feedback
nkuehnel Nov 11, 2019
93f9265
translate income groups to EUR, use constants instead of magic numbers
nkuehnel Nov 12, 2019
a4537ea
Merge remote-tracking branch 'origin/cllorca_branch' into noiseFeedback
nkuehnel Nov 19, 2019
9f18db5
Merge branch 'master' into noiseFeedback
nkuehnel Nov 22, 2019
7f51567
updates on noise feedback (also calculate noise for newly created dwe…
nkuehnel Nov 26, 2019
327dcd5
merge master into noise feedback branch
nkuehnel Dec 6, 2019
627bcb1
Merge branch 'cleanUpMatsimTransportModel' into noiseFeedback
nkuehnel Dec 10, 2019
1614341
updates on noise feedback
nkuehnel Dec 16, 2019
4b0a425
updates to noise model
nkuehnel Jan 7, 2020
95de370
switch to weekly release
dziemke Jan 23, 2020
0c03090
put noise toll code in noiseModel
nkuehnel Feb 27, 2020
5798bdf
react to changes in matsim
kainagel Feb 27, 2020
8031f4a
updates to noise feedback
nkuehnel Jul 27, 2020
28f1018
Merge remote-tracking branch 'origin/master' into noiseFeedback
nkuehnel Jan 26, 2021
e7ee8c0
add hedonic pricing model
nkuehnel Jan 31, 2021
2b5839f
Merge branch 'master' into noiseFeedback
nkuehnel Jan 31, 2021
c8026bf
updates to hedonic pricing model
nkuehnel Feb 2, 2021
0865955
noise updates
nkuehnel Feb 10, 2021
0d37e99
noise feedback
nkuehnel Jul 26, 2021
80b7e79
updates noise feedback
nkuehnel Aug 24, 2021
71769e8
Merge branch 'master' into noiseFeedback
nkuehnel Aug 31, 2021
8edd908
noise feedback updates
nkuehnel Aug 31, 2021
d091c19
Merge branch 'master' into noiseFeedback
nkuehnel Aug 31, 2021
5e435c8
matsim release 13.0
nkuehnel Aug 31, 2021
a04158a
update geotools version
nkuehnel Aug 31, 2021
fe215b4
delete code artifacts
nkuehnel Aug 31, 2021
7162880
fix test
nkuehnel Aug 31, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion extensions/matsim2silo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,12 @@
<modelVersion>4.0.0</modelVersion>

<artifactId>matsim2silo</artifactId>

<dependencies>
<dependency>
<groupId>org.matsim.contrib</groupId>
<artifactId>noise</artifactId>
<version>${matsimVersion}</version>
</dependency>
<dependency>
<groupId>org.matsim.contrib</groupId>
<artifactId>dvrp</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public void filterNetwork(Network network) {
this.ptNetwork = ptNetwork;
}

ZoneConnectorManager getZoneConnectorManager() {
public ZoneConnectorManager getZoneConnectorManager() {
return zoneConnectorManager;
}

Expand All @@ -130,15 +130,15 @@ public void update(TravelDisutility travelDisutility, TravelTime travelTime) {

if (config.transit().isUseTransit() && schedule != null) {
RaptorStaticConfig raptorConfig = RaptorUtils.createStaticConfig(config);
raptorData = SwissRailRaptorData.create(schedule, raptorConfig, ptNetwork);
raptorData = SwissRailRaptorData.create(schedule, null, raptorConfig, ptNetwork, new OccupancyData());

RaptorStaticConfig raptorConfigOneToAll = RaptorUtils.createStaticConfig(config);
raptorConfigOneToAll.setOptimization(RaptorStaticConfig.RaptorOptimization.OneToAllRouting);
raptorDataOneToAll = SwissRailRaptorData.create(schedule, raptorConfigOneToAll, ptNetwork);
raptorDataOneToAll = SwissRailRaptorData.create(schedule, null, raptorConfigOneToAll, ptNetwork, new OccupancyData());

parametersForPerson = new DefaultRaptorParametersForPerson(config);
defaultRaptorStopFinder = new DefaultRaptorStopFinder(
null,
config,
new DefaultRaptorIntermodalAccessEgress(),
null);
routeSelector = new LeastCostRaptorRouteSelector();
Expand Down Expand Up @@ -187,9 +187,9 @@ TripRouter createTripRouter() {
SwissRailRaptor createSwissRailRaptor(RaptorStaticConfig.RaptorOptimization optimitzaion) {
switch (optimitzaion) {
case OneToAllRouting:
return new SwissRailRaptor(raptorDataOneToAll, parametersForPerson, routeSelector, defaultRaptorStopFinder);
return new SwissRailRaptor(raptorDataOneToAll, parametersForPerson, routeSelector, defaultRaptorStopFinder, new DefaultRaptorInVehicleCostCalculator(), new DefaultRaptorTransferCostCalculator());
case OneToOneRouting:
return new SwissRailRaptor(raptorData, parametersForPerson, routeSelector, defaultRaptorStopFinder);
return new SwissRailRaptor(raptorData, parametersForPerson, routeSelector, defaultRaptorStopFinder, new DefaultRaptorInVehicleCostCalculator(), new DefaultRaptorTransferCostCalculator());
default:
throw new RuntimeException("Unrecognized raptor optimization!");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
import org.matsim.api.core.v01.TransportMode;
import org.matsim.api.core.v01.population.PopulationFactory;
import org.matsim.contrib.dvrp.trafficmonitoring.TravelTimeUtils;
import org.matsim.contrib.noise.NoiseModule;
import org.matsim.contrib.noise.NoiseReceiverPoints;
import org.matsim.core.config.Config;
import org.matsim.core.config.ConfigUtils;
import org.matsim.core.config.groups.PlansCalcRouteConfigGroup;
Expand Down Expand Up @@ -158,6 +160,7 @@ private void runTransportModel(int year) {
assembledScenario = scenarioAssembler.assembleScenario(initialMatsimConfig, year, travelTimes);

finalizeConfig(assembledScenario.getConfig(), year);
assembledScenario.getConfig().transit().setUsingTransitInMobsim(false);

final Controler controler = new Controler(assembledScenario);

Expand Down Expand Up @@ -186,8 +189,9 @@ private void finalizeConfig(Config config, int year) {
* @param eventsFile
*/
private void replayFromEvents(String eventsFile) {
logger.warn("Setting up MATSim with initial events file: " + eventsFile);
Scenario scenario = ScenarioUtils.loadScenario(initialMatsimConfig);
TravelTime travelTime = TravelTimeUtils.createTravelTimesFromEvents(scenario, eventsFile);
TravelTime travelTime = TravelTimeUtils.createTravelTimesFromEvents(scenario.getNetwork(), initialMatsimConfig, eventsFile);
TravelDisutility travelDisutility = ControlerDefaults.createDefaultTravelDisutilityFactory(scenario).createTravelDisutility(travelTime);
updateTravelTimes(travelTime, travelDisutility);
}
Expand All @@ -206,4 +210,8 @@ private void updateTravelTimes(TravelTime travelTime, TravelDisutility disutilit
dataContainer.getGeoData().getZones().values());
}
}

public MatsimData getMatsimData() {
return matsimData;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package de.tum.bgu.msm.matsim.noise;

import de.tum.bgu.msm.data.dwelling.Dwelling;

public interface NoiseDwelling extends Dwelling {

void setNoiseImmision(double lden);

double getNoiseImmission();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
package de.tum.bgu.msm.matsim.noise;

import com.google.inject.Key;
import com.google.inject.TypeLiteral;
import de.tum.bgu.msm.container.DataContainer;
import de.tum.bgu.msm.data.dwelling.Dwelling;
import de.tum.bgu.msm.data.dwelling.RealEstateDataManager;
import de.tum.bgu.msm.matsim.MatsimData;
import de.tum.bgu.msm.models.AbstractModel;
import de.tum.bgu.msm.models.ModelUpdateListener;
import de.tum.bgu.msm.properties.Properties;
import org.apache.log4j.Logger;
import org.matsim.api.core.v01.Id;
import org.matsim.api.core.v01.TransportMode;
import org.matsim.contrib.noise.*;
import org.matsim.core.config.Config;
import org.matsim.core.config.ConfigUtils;
import org.matsim.core.controler.AbstractModule;
import org.matsim.core.controler.Injector;
import org.matsim.core.events.EventsManagerModule;
import org.matsim.core.population.io.PopulationReader;
import org.matsim.core.router.costcalculators.RandomizingTimeDistanceTravelDisutilityFactory;
import org.matsim.core.router.costcalculators.TravelDisutilityFactory;
import org.matsim.core.router.util.TravelDisutility;
import org.matsim.core.scenario.MutableScenario;
import org.matsim.core.scenario.ScenarioByInstanceModule;
import org.matsim.core.scenario.ScenarioUtils;
import org.matsim.core.utils.geometry.CoordUtils;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;
import java.util.Random;

public class NoiseModel extends AbstractModel implements ModelUpdateListener {

private static final Logger logger = Logger.getLogger(NoiseModel.class);

private final Config initialConfig;

private final RealEstateDataManager realEstateDataManager;
private final MatsimData matsimData;
private int latestMatsimYear = -1;

private final NoiseReceiverPoints noiseReceiverPoints;


public NoiseModel(Config initialConfig, DataContainer data, Properties properties, Random random, MatsimData matsimData) {
super(data, properties, random);
this.initialConfig = initialConfig;
this.realEstateDataManager = data.getRealEstateDataManager();
this.matsimData = matsimData;
this.noiseReceiverPoints = new NoiseReceiverPoints();
}

@Override
public void setup() {
updateImmissions(properties.main.baseYear);
}

@Override
public void prepareYear(int year) {

}

@Override
public void endYear(int year) {
updateImmissions(year);
}

@Override
public void endSimulation() {
}

private void updateImmissions(int year) {
logger.info("Updating noise immisisons for year " + year + ".");

NoiseReceiverPoints newNoiseReceiverPoints = new NoiseReceiverPoints();
NoiseReceiverPoints existingNoiseReceiverPoints = new NoiseReceiverPoints();

for (Dwelling dwelling : realEstateDataManager.getDwellings()) {
Id<ReceiverPoint> id = Id.create(dwelling.getId(), ReceiverPoint.class);
final NoiseReceiverPoint existing = noiseReceiverPoints.remove(id);
if (existing == null) {
newNoiseReceiverPoints.put(id, new NoiseReceiverPoint(id, CoordUtils.createCoord(dwelling.getCoordinate())));
} else {
existingNoiseReceiverPoints.put(id, existing);
}
}

this.noiseReceiverPoints.clear();
this.noiseReceiverPoints.putAll(newNoiseReceiverPoints);
this.noiseReceiverPoints.putAll(existingNoiseReceiverPoints);

//First year
if(properties.main.startYear == year) {
if(properties.transportModel.matsimInitialPlansFile != null
&& properties.transportModel.matsimInitialEventsFile != null) {
replayFromEvents(noiseReceiverPoints);
} else {
//matsim transport model must have run at this stage for the start year
latestMatsimYear = year;
calculateNoiseOffline(noiseReceiverPoints);
}
} else if (properties.transportModel.transportModelYears.contains(year + 1)) {
//matsim either has to run and update all receiver points for the next year...
latestMatsimYear = year + 1;
calculateNoiseOffline(noiseReceiverPoints);
} else if(latestMatsimYear == -1 && properties.transportModel.matsimInitialPlansFile != null
&& properties.transportModel.matsimInitialEventsFile != null) {
//...or the initial files are available and still valid for this year. update new receiver points.
replayFromEvents(newNoiseReceiverPoints);
} else {
//matsim has run before. update new receiver points.
calculateNoiseOffline(newNoiseReceiverPoints);
}

int counter65 = 0;
int counter55 = 0;
for (Dwelling dwelling : dataContainer.getRealEstateDataManager().getDwellings()) {
final Id<ReceiverPoint> id = Id.create(dwelling.getId(), ReceiverPoint.class);
if (noiseReceiverPoints.containsKey(id)) {
double lden = noiseReceiverPoints.get(id).getLden();
((NoiseDwelling) dwelling).setNoiseImmision(lden);
if (lden > 55) {
if (lden > 65) {
counter65++;
} else {
counter55++;
}
}
}
}
int total = dataContainer.getRealEstateDataManager().getDwellings().size();
int quiet = total - counter55 - counter65;
logger.info("Dwellings <55dB(A) : " + quiet + " (" + ((double) quiet) / total + "%)");
logger.info("Dwellings 55dB(A)-65dB(A) : " + counter55 + " (" + ((double) counter55) / total + "%)");
logger.info("Dwellings >65dB(A) : " + counter65 + " (" + ((double) counter65) / total + "%)");
}


private void calculateNoiseOffline(NoiseReceiverPoints noiseReceiverPoints) {
final String outputDirectoryRoot = properties.main.baseDirectory + "scenOutput/"
+ properties.main.scenarioName + "/matsim/" + latestMatsimYear + "/";

Config config = ConfigUtils.createConfig(initialConfig.getContext());
config.controler().setOutputDirectory(outputDirectoryRoot);
config.controler().setRunId(String.valueOf(latestMatsimYear));
final MutableScenario scenario = ScenarioUtils.createMutableScenario(config);

// new PopulationReader(scenario).readFile(populationPath);

scenario.setNetwork(matsimData.getCarNetwork());

scenario.addScenarioElement(NoiseReceiverPoints.NOISE_RECEIVER_POINTS, noiseReceiverPoints);

NoiseConfigGroup noiseParameters = ConfigUtils.addOrGetModule(initialConfig, NoiseConfigGroup.class);
noiseParameters.setInternalizeNoiseDamages(false);
noiseParameters.setComputeCausingAgents(false);
noiseParameters.setComputeNoiseDamages(false);
noiseParameters.setComputePopulationUnits(false);
noiseParameters.setComputeAvgNoiseCostPerLinkAndTime(false);
noiseParameters.setThrowNoiseEventsCaused(false);
noiseParameters.setThrowNoiseEventsAffected(false);
noiseParameters.setConsiderNoiseBarriers(true);
noiseParameters.setNoiseComputationMethod(NoiseConfigGroup.NoiseComputationMethod.RLS19);
noiseParameters.setWriteOutputIteration(0);
noiseParameters.setScaleFactor(1./initialConfig.qsim().getFlowCapFactor());
config.addModule(noiseParameters);

config.qsim().setEndTime(24 * 60 * 60);

noiseParameters.setConsiderNoiseBarriers(true);
noiseParameters.setNoiseBarriersFilePath("D:\\resultStorage\\diss\\noise\\aggBuildingPoly.geojson");
noiseParameters.setNoiseBarriersSourceCRS("EPSG:31468");
config.global().setCoordinateSystem("EPSG:31468");

NoiseOfflineCalculation noiseOfflineCalculation = new NoiseOfflineCalculation(scenario, outputDirectoryRoot);
noiseOfflineCalculation.run();

}


private void replayFromEvents(NoiseReceiverPoints noiseReceiverPoints) {

final String outputDirectoryRoot = properties.main.baseDirectory + "scenOutput/" + properties.main.scenarioName;
String outputDirectory = outputDirectoryRoot + "/matsim/" + properties.main.startYear +"_warm" + "/";

try {
final Path events = Paths.get(outputDirectory + "/"+ Paths.get(properties.transportModel.matsimInitialEventsFile).getFileName());
final Path plans = Paths.get(outputDirectory + "/" + Paths.get(properties.transportModel.matsimInitialPlansFile).getFileName());

Files.createDirectories(events.getParent());
Files.createDirectories(plans.getParent());

Files.copy(Paths.get(properties.main.baseDirectory + properties.transportModel.matsimInitialEventsFile), events);
Files.copy(Paths.get(properties.main.baseDirectory + properties.transportModel.matsimInitialPlansFile), plans);

} catch (Exception e) {
logger.error(e);
}


String eventsFile = properties.main.baseDirectory + properties.transportModel.matsimInitialEventsFile;
final Path path = Paths.get(eventsFile);

String plansFile = properties.main.baseDirectory + properties.transportModel.matsimInitialPlansFile;


Config config = ConfigUtils.createConfig();
config.controler().setOutputDirectory(outputDirectory);
String runId = eventsFile.substring(eventsFile.lastIndexOf("/") + 1, eventsFile.indexOf(".output_events"));
config.controler().setRunId(runId);
final MutableScenario scenario = ScenarioUtils.createMutableScenario(config);
new PopulationReader(scenario).readFile(plansFile);

scenario.setNetwork(matsimData.getCarNetwork());
scenario.addScenarioElement(NoiseReceiverPoints.NOISE_RECEIVER_POINTS, noiseReceiverPoints);

NoiseConfigGroup noiseParameters = ConfigUtils.addOrGetModule(initialConfig, NoiseConfigGroup.class);
noiseParameters.setInternalizeNoiseDamages(false);
noiseParameters.setComputeCausingAgents(false);
noiseParameters.setComputeNoiseDamages(false);
noiseParameters.setComputePopulationUnits(false);
noiseParameters.setComputeAvgNoiseCostPerLinkAndTime(false);
noiseParameters.setThrowNoiseEventsCaused(false);
noiseParameters.setConsiderNoiseBarriers(true);
noiseParameters.setNoiseComputationMethod(NoiseConfigGroup.NoiseComputationMethod.RLS19);
noiseParameters.setThrowNoiseEventsAffected(false);
noiseParameters.setWriteOutputIteration(0);
noiseParameters.setScaleFactor(1./initialConfig.qsim().getFlowCapFactor());
config.addModule(noiseParameters);

config.qsim().setEndTime(24 * 60 * 60);


noiseParameters.setConsiderNoiseBarriers(true);
noiseParameters.setNoiseBarriersFilePath("C:\\Users\\Nico\\tum\\diss\\noise\\aggBuildingPoly.geojson");
noiseParameters.setNoiseBarriersSourceCRS("EPSG:31468");
config.global().setCoordinateSystem("EPSG:31468");


NoiseOfflineCalculation noiseOfflineCalculation = new NoiseOfflineCalculation(scenario, path.getParent().toString());
noiseOfflineCalculation.run();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//package de.tum.bgu.msm.matsim.noise;
//
//import de.tum.bgu.msm.matsim.MatsimScenarioAssembler;
//import org.matsim.api.core.v01.Scenario;
//import org.matsim.contrib.noise.NoiseConfigGroup;
//import org.matsim.contrib.noise.NoiseReceiverPoints;
//import org.matsim.core.config.Config;
//import org.matsim.core.config.ConfigUtils;
//import org.matsim.core.config.groups.ControlerConfigGroup;
//
//public final class NoiseScenarioAssembler implements MatsimScenarioAssembler {
//
// private final MatsimScenarioAssembler delegate;
// private final NoiseDataManager noiseDataManager;
//
// public NoiseScenarioAssembler(MatsimScenarioAssembler delegate, NoiseDataManager noiseDataManager) {
// this.delegate = delegate;
// this.noiseDataManager = noiseDataManager;
// }
//
// @Override
// public Scenario assembleScenario(Config initialMatsimConfig, int year) {
// Scenario scenario = delegate.assembleScenario(initialMatsimConfig, year);
// final NoiseReceiverPoints noiseReceiverPoints = noiseDataManager.getNoiseReceiverPoints();
// scenario.getConfig().controler().setRoutingAlgorithmType(ControlerConfigGroup.RoutingAlgorithmType.FastDijkstra);
// scenario.addScenarioElement(NoiseReceiverPoints.NOISE_RECEIVER_POINTS, noiseReceiverPoints);
// NoiseConfigGroup noiseParameters = ConfigUtils.addOrGetModule(scenario.getConfig(), NoiseConfigGroup.class);
// noiseParameters.setInternalizeNoiseDamages(false);
// noiseParameters.setComputeCausingAgents(false);
// noiseParameters.setComputeNoiseDamages(false);
// noiseParameters.setComputePopulationUnits(false);
// noiseParameters.setComputeAvgNoiseCostPerLinkAndTime(false);
// noiseParameters.setThrowNoiseEventsCaused(false);
// noiseParameters.setThrowNoiseEventsAffected(false);
// noiseParameters.setWriteOutputIteration(0);
// scenario.getConfig().qsim().setEndTime(24*60*60);
//
// return scenario;
// }
//}
Loading