Skip to content
Snippets Groups Projects
Commit 11d61c9b authored by awenjb's avatar awenjb
Browse files

Some fixes in Jupyter files

parent 7e8b7040
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id: tags:
``` python
%pip install folium pandas OSMnx networkx scikit-learn matplotlib numpy
```
%% Output
Requirement already satisfied: folium in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (0.19.4)
Requirement already satisfied: pandas in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (2.2.3)
Requirement already satisfied: OSMnx in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (2.0.1)
Requirement already satisfied: networkx in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (3.4.2)
Requirement already satisfied: scikit-learn in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (1.6.1)
Requirement already satisfied: matplotlib in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (3.10.1)
Requirement already satisfied: numpy in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (2.2.3)
Requirement already satisfied: branca>=0.6.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from folium) (0.8.1)
Requirement already satisfied: jinja2>=2.9 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from folium) (3.1.5)
Requirement already satisfied: requests in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from folium) (2.32.3)
Requirement already satisfied: xyzservices in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from folium) (2025.1.0)
Requirement already satisfied: python-dateutil>=2.8.2 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from pandas) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from pandas) (2025.1)
Requirement already satisfied: tzdata>=2022.7 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from pandas) (2025.1)
Requirement already satisfied: geopandas>=1.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from OSMnx) (1.0.1)
Requirement already satisfied: shapely>=2.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from OSMnx) (2.0.7)
Requirement already satisfied: scipy>=1.6.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from scikit-learn) (1.15.2)
Requirement already satisfied: joblib>=1.2.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from scikit-learn) (1.4.2)
Requirement already satisfied: threadpoolctl>=3.1.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from scikit-learn) (3.5.0)
Requirement already satisfied: contourpy>=1.0.1 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from matplotlib) (1.3.1)
Requirement already satisfied: cycler>=0.10 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from matplotlib) (4.56.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from matplotlib) (1.4.8)
Requirement already satisfied: packaging>=20.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from matplotlib) (24.2)
Requirement already satisfied: pillow>=8 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from matplotlib) (11.1.0)
Requirement already satisfied: pyparsing>=2.3.1 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from matplotlib) (3.2.1)
Requirement already satisfied: pyogrio>=0.7.2 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from geopandas>=1.0->OSMnx) (0.10.0)
Requirement already satisfied: pyproj>=3.3.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from geopandas>=1.0->OSMnx) (3.7.1)
Requirement already satisfied: MarkupSafe>=2.0 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from jinja2>=2.9->folium) (3.0.2)
Requirement already satisfied: six>=1.5 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)
Requirement already satisfied: charset_normalizer<4,>=2 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from requests->folium) (3.4.1)
Requirement already satisfied: idna<4,>=2.5 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from requests->folium) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from requests->folium) (2.3.0)
Requirement already satisfied: certifi>=2017.4.17 in /home/a24jacqb/.julia/conda/3/x86_64/lib/python3.12/site-packages (from requests->folium) (2025.1.31)
Note: you may need to restart the kernel to use updated packages.
%% Cell type:code id: tags:
``` python
import solution_reader
import os
import pandas as pd
import numpy as np
```
%% Cell type:code id: tags:
``` python
# Files
solution_directory = "./../output/selection"
best_known_file = "./../best_known/best_known_LL01_100.txt"
# Best known dataframe
best_known_df = solution_reader.read_best_known(best_known_file)
# Solution dataframe
solutions_list = []
files = os.listdir(solution_directory)
for solution_file in files :
solution = solution_reader.PDPTWCompleteSolution(solution_directory + "/" + solution_file)
solution_dict = {
"Instance": solution.get_instance(),
"Vehicles": solution.get_vehicles(),
"Distance": solution.get_cost(),
"Reference": solution.get_reference(),
"Date": solution.get_date()
}
solutions_list.append(solution_dict)
solutions_df = pd.DataFrame(solutions_list)
best_known_df = best_known_df[best_known_df['Instance'].isin(solutions_df['Instance'])]
solutions_df.sort_values(by=["Instance"], inplace=True)
best_known_df.sort_values(by=["Instance"], inplace=True)
solutions_df.reset_index(drop=True, inplace=True)
best_known_df.reset_index(drop=True, inplace=True)
print(best_known_df)
print(solutions_df)
```
%% Output
Instance Vehicles Distance Reference Date
0 lc101 10 828.94 Li&Lim 2001
1 lc102 10 828.94 Li&Lim 2001
2 lc103 9 1035.35 BVH 27-jun-03
3 lc201 3 591.56 Li&Lim 2001
4 lc202 3 591.56 Li&Lim 2001
5 lc203 3 591.17 SAM::OPT 11-mar-03
6 lr101 19 1650.80 Li&Lim 2001
7 lr102 17 1487.57 Li&Lim 2001
8 lr103 13 1292.68 Li&Lim 2001
9 lr201 4 1253.23 SAM::OPT 28-feb-03
10 lr202 3 1197.67 Li&Lim 2001
11 lr203 3 949.40 Li&Lim 2001
12 lrc101 14 1708.80 Li&Lim 2001
13 lrc102 12 1558.07 SAM::OPT 19-feb-03
14 lrc103 11 1258.74 Li&Lim 2001
15 lrc201 4 1406.94 SAM::OPT 28-feb-03
16 lrc202 3 1374.27 Li&Lim 2001
17 lrc203 3 1089.07 Li&Lim 2001
Instance Vehicles Distance Reference Date
0 lc101 10 828.94 ... 31-03-2025
1 lc102 10 828.94 ... 31-03-2025
2 lc103 10 827.87 ... 31-03-2025
3 lc201 3 591.56 ... 31-03-2025
4 lc202 3 591.56 ... 31-03-2025
5 lc203 3 591.18 ... 31-03-2025
6 lr101 19 1650.80 ... 31-03-2025
7 lr102 17 1495.52 ... 31-03-2025
8 lr103 13 1306.89 ... 31-03-2025
9 lr201 4 1267.46 ... 31-03-2025
10 lr202 4 1269.80 ... 31-03-2025
11 lr203 3 962.05 ... 31-03-2025
12 lrc101 14 1708.81 ... 31-03-2025
13 lrc102 13 1566.59 ... 31-03-2025
14 lrc103 12 1308.83 ... 31-03-2025
15 lrc201 5 1464.26 ... 31-03-2025
16 lrc202 4 1407.81 ... 31-03-2025
17 lrc203 4 1093.84 ... 31-03-2025
/home/a24jacqb/Documents/Code/pdptw-main/python/solution_reader.py:14: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
df = pd.read_csv(file, delim_whitespace=True, names=["Instance", "Vehicles", "Distance", "Reference", "Date"], skiprows=1)
%% Cell type:code id: tags:
``` python
sum_vehicles_best_known = np.sum(best_known_df["Vehicles"])
sum_vehicles_solution = np.sum(solutions_df["Vehicles"])
sum_distance_best_known = np.sum(best_known_df["Distance"])
sum_distance_solution = np.sum(solutions_df["Distance"])
mean_vehicles_best_known = np.mean(best_known_df["Vehicles"])
mean_vehicles_solution = np.mean(solutions_df["Vehicles"])
mean_distance_best_known = np.mean(best_known_df["Distance"])
mean_distance_solution = np.mean(solutions_df["Distance"])
# Mean absolute error (MAE)
mae_vehicles = np.mean(np.abs(solutions_df["Vehicles"] - best_known_df["Vehicles"]))
mae_distances = np.mean(np.abs(solutions_df["Distance"] - best_known_df["Distance"]))
# Mean relative error (MRE)
mre_vehicles = np.mean(np.abs((solutions_df["Vehicles"] - best_known_df["Vehicles"]) / best_known_df["Vehicles"]))
mre_distances = np.mean(np.abs((solutions_df["Distance"] - best_known_df["Distance"]) / best_known_df["Distance"]))
# Mean ratio
mr_vehicles = mean_vehicles_solution / mean_vehicles_best_known
mr_distances = mean_distance_solution / mean_distance_best_known
# Percentage error is calculated as (MAE / Actual value) * 100
percentage_error_vehicles = ((mean_vehicles_solution - mean_vehicles_best_known) / mean_vehicles_best_known) * 100
percentage_error_distances = ((mean_distance_solution - mean_distance_best_known) / mean_distance_best_known) * 100
print(f"Vehicle difference: {sum_vehicles_solution - sum_vehicles_best_known}")
print(f"Mean Absolute Error (distance): {mae_distances:.4f}")
print(f"Mean Relative Error (distance): {mre_distances:.4f}")
print(f"Mean Approximation Ratio (distance): {mr_distances:.4f}")
print(f"Percentage Error (vehicles): {percentage_error_vehicles:.2f}%")
print(f"Percentage Error (distances): {percentage_error_distances:.2f}%")
```
%% Output
Vehicle difference: 7
Mean Absolute Error (distance): 358.8829
Mean Relative Error (distance): 0.4845
Mean Absolute Error (distance): 26.8283
Mean Relative Error (distance): 0.0231
Mean Approximation Ratio (distance): 1.0033
Percentage Error (vehicles): 4.86%
Percentage Error (distances): 0.33%
%% Cell type:markdown id: tags:
5000 iterations
- Vehicle difference: 7
- Mean Absolute Error (distance): 26.8283
- Mean Relative Error (distance): 0.0231
- Mean Approximation Ratio (distance): 1.0033
- Percentage Error (vehicles): 4.86%
- Percentage Error (distances): 0.33%
10000 iterations
- Vehicle difference: 6
- Mean Absolute Error (distance): 21.3128
- Mean Relative Error (distance): 0.0188
- Mean Approximation Ratio (distance): 0.9985
- Percentage Error (vehicles): 4.17%
- Percentage Error (distances): -0.15%
negative % error due to some solution having more routes but less travel distances
......
......@@ -12,7 +12,7 @@ int const ROUTE_PENALTY = 0;
int const NUMBER_VEHICLE = 50;
// Number of iterations for the algorithm or simulation to run.
int const NUMBER_ITERATION = 100000;
int const NUMBER_ITERATION = 10000;
// Flags
......@@ -33,4 +33,4 @@ bool const COMPLETE_STORE = true;
// Directories
std::string const OUTPUT_DIRECTORY = "./../../output/test2";
\ No newline at end of file
std::string const OUTPUT_DIRECTORY = "./../../output/select2";
\ No newline at end of file
......@@ -124,18 +124,21 @@ Solution &Solution::operator=(Solution const &rhs)
return *this;
}
Solution::Solution(Solution &&sol) noexcept : data(std::move(sol.data))
Solution::Solution(Solution &&sol) noexcept : data(sol.data)
{
*this = std::move(sol);
}
Solution &Solution::operator=(Solution &&sol) noexcept
{
if (this == &sol) return *this;
if (this == &sol)
{
return *this;
}
data = std::move(sol.data);
rawCost = std::move(sol.rawCost);
totalCost = std::move(sol.totalCost);
data = sol.data;
rawCost = sol.rawCost;
totalCost = sol.totalCost;
pairBank = std::move(sol.pairBank);
routes = std::move(sol.routes);
......@@ -259,7 +262,7 @@ bool Solution::checkModification(AtomicRecreation const &modification) const
return true;
}
void Solution::beforeApplyModification(AtomicModification &modification)
void Solution::beforeApplyModification(AtomicModification &modification) const
{
// Pre-modification check
check();
......
......@@ -34,7 +34,7 @@ private:
public:
/*
* Creates an empty solution with all pairs in the pairBank and one empty route.
* Creates an empty solution with all pairs in the pairBank.
*/
static Solution emptySolution(PDPTWData const &data);
......@@ -137,7 +137,7 @@ public:
/*
* Pre-modification check. The modification must be valid.
*/
void beforeApplyModification(AtomicModification &modification);
void beforeApplyModification(AtomicModification &modification) const;
/*
* Updates constraints after modification is applied.
*/
......
......@@ -116,16 +116,16 @@ int main(int argc, char **argv)
///////////////////////////////////////////////////////////////////////
//std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/n100/bar-n100-1.json";
std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/pdp_100/lc103.json";
//std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/pdp_100/lc106.json";
//std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/Nantes_1.json";
//std::string filepath = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/n5000/bar-n5000-1.json";
PDPTWData data = parsing::parseJson(filepath);
Solution startingSolution = Solution::emptySolution(data);
simpleLNS(data, startingSolution);
// PDPTWData data = parsing::parseJson(filepath);
// Solution startingSolution = Solution::emptySolution(data);
// simpleLNS(data, startingSolution);
// std::string path = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/selection";
// runAllInDirectory(path, simpleLNS);
std::string path = "/home/a24jacqb/Documents/Code/pdptw-main/data_in/selection";
runAllInDirectory(path, simpleLNS);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment