Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
experiments/
test/test_.*.py

# VS Code environment
.vscode/

# MacOS
.DS_Store

Expand Down
1 change: 0 additions & 1 deletion .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,5 @@ build:
tools:
python: miniconda-latest


conda:
environment: environment.yml
11 changes: 0 additions & 11 deletions .vscode/launch.json

This file was deleted.

17 changes: 0 additions & 17 deletions .vscode/settings.json

This file was deleted.

25 changes: 17 additions & 8 deletions demo/demo_data_farming_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@

import sys
import os.path as o
sys.path.append(o.abspath(o.join(o.dirname(sys.modules[__name__].__file__), ".."))) # type:ignore

sys.path.append(
o.abspath(o.join(o.dirname(sys.modules[__name__].__file__), ".."))
) # type:ignore


from simopt.data_farming_base import DataFarmingExperiment
Expand All @@ -15,7 +18,12 @@
model_name = "CNTNEWS"

# Specify the names of the model factors (in order) that will be varied.
factor_headers = ["purchase_price", "sales_price", "salvage_price", "order_quantity"]
factor_headers = [
"purchase_price",
"sales_price",
"salvage_price",
"order_quantity",
]

# If creating the design, provide the name of a .txt file containing
# the following:
Expand Down Expand Up @@ -52,12 +60,13 @@
# No code beyond this point needs to be edited.

# Create DataFarmingExperiment object.
myexperiment = DataFarmingExperiment(model_name=model_name,
factor_settings_filename=factor_settings_filename,
factor_headers=factor_headers,
design_filepath=design_filename,
model_fixed_factors={}
)
myexperiment = DataFarmingExperiment(
model_name=model_name,
factor_settings_filename=factor_settings_filename,
factor_headers=factor_headers,
design_filepath=design_filename,
model_fixed_factors={},
)

# Run replications and print results to file.
myexperiment.run(n_reps=n_reps, crn_across_design_pts=crn_across_design_pts)
Expand Down
76 changes: 44 additions & 32 deletions demo/demo_data_farming_over_solver_and_problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@

import sys
import os.path as o
sys.path.append(o.abspath(o.join(o.dirname(sys.modules[__name__].__file__), ".."))) # type:ignore

sys.path.append(
o.abspath(o.join(o.dirname(sys.modules[__name__].__file__), ".."))
) # type:ignore

from simopt.experiment_base import create_design, ProblemsSolvers

def main():

def main() -> None:
# Specify the name of the solver as it appears in directory.py
solver_name = "ASTRODF"
# Specify the name of the problem as it appears in directory.py
Expand All @@ -19,13 +23,13 @@ def main():
model_name = "CNTNEWS"

# Specify the names of the sovler factors (in order) that will be varied.
solver_factor_headers = ["eta_1", "eta_2", "lambda_min" ]
solver_factor_headers = ["eta_1", "eta_2", "lambda_min"]
# Specify the names of the model factors (in order) that will be varied.
model_factor_headers = ["purchase_price", "sales_price", "order_quantity"]

# OPTIONAL: factors chosen for cross design
# factor name followed by list containing factor values to cross design over
solver_cross_design_factors = {'crn_across_solns': [True, False]}
solver_cross_design_factors = {"crn_across_solns": [True, False]}
# model_cross_design_factors = {}

# OPTIONAL: Provide additional overrides for default factors.
Expand Down Expand Up @@ -65,38 +69,41 @@ def main():
crn_across_init_opt = True # Default

# Create DataFarmingExperiment object for sovler design
solver_design_list = create_design(name=solver_name,
factor_headers=solver_factor_headers,
factor_settings_filename=solver_factor_settings_filename,
n_stacks=solver_n_stacks,
fixed_factors=solver_fixed_factors, #optional
cross_design_factors= solver_cross_design_factors, #optional
)
solver_design_list = create_design(
name=solver_name,
factor_headers=solver_factor_headers,
factor_settings_filename=solver_factor_settings_filename,
n_stacks=solver_n_stacks,
fixed_factors=solver_fixed_factors, # optional
cross_design_factors=solver_cross_design_factors, # optional
)
# Create DataFarmingExperiment object for model design
model_design_list = create_design(name=model_name,
factor_headers=model_factor_headers,
factor_settings_filename=model_factor_settings_filename,
n_stacks=problem_n_stacks,
fixed_factors=model_fixed_factors, #optional
#cross_design_factors=model_cross_design_factors, #optional
)
model_design_list = create_design(
name=model_name,
factor_headers=model_factor_headers,
factor_settings_filename=model_factor_settings_filename,
n_stacks=problem_n_stacks,
fixed_factors=model_fixed_factors, # optional
# cross_design_factors=model_cross_design_factors, #optional
)

# create solver name list for ProblemsSolvers (do not edit)
solver_names = []
for i in range(len(solver_design_list)):
for _ in range(len(solver_design_list)):
solver_names.append(solver_name)

# create proble name list for ProblemsSolvers (do not edit)
problem_names = []
for i in range(len(model_design_list)):
for _ in range(len(model_design_list)):
problem_names.append(problem_name)

# Create ProblemsSovlers experiment with solver and model design
experiment = ProblemsSolvers(solver_factors = solver_design_list,
problem_factors = model_design_list,
solver_names = solver_names,
problem_names = problem_names
)
experiment = ProblemsSolvers(
solver_factors=solver_design_list,
problem_factors=model_design_list,
solver_names=solver_names,
problem_names=problem_names,
)

# check compatibility of selected solvers and problems
experiment.check_compatibility()
Expand All @@ -105,16 +112,21 @@ def main():
experiment.run(n_macroreps)

# Postprocess the experimental results from each design point.
experiment.post_replicate(n_postreps=n_postreps,
crn_across_budget=crn_across_budget,
crn_across_macroreps=crn_across_macroreps)
experiment.post_normalize(n_postreps_init_opt=n_postreps_init_opt,
crn_across_init_opt=crn_across_init_opt)
experiment.post_replicate(
n_postreps=n_postreps,
crn_across_budget=crn_across_budget,
crn_across_macroreps=crn_across_macroreps,
)
experiment.post_normalize(
n_postreps_init_opt=n_postreps_init_opt,
crn_across_init_opt=crn_across_init_opt,
)

# Record and log results
experiment.record_group_experiment_results()
experiment.log_group_experiment_results()
experiment.report_group_statistics()


if __name__ == "__main__":
main()
main()
68 changes: 38 additions & 30 deletions demo/demo_data_farming_problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,28 @@

import sys
import os.path as o
sys.path.append(o.abspath(o.join(o.dirname(sys.modules[__name__].__file__), "..")))

from simopt.experiment_base import create_design, ProblemsSolvers # type:ignore
sys.path.append(
o.abspath(o.join(o.dirname(sys.modules[__name__].__file__), ".."))
)

def main():
from simopt.experiment_base import create_design, ProblemsSolvers # type:ignore


def main() -> None:
# Specify the name of the problem as it appears in directory.py
problem_name = "CNTNEWS-1"
# Specify the name of the model as it appears in directory.py
model_name = "CNTNEWS"
# Specify the name of the solver as it appears in directory.py
solver_names = ["ASTRODF","RNDSRCH"]
solver_names = ["ASTRODF", "RNDSRCH"]

# Specify the names of the model factors (in order) that will be varied.
model_factor_headers = ["purchase_price", "sales_price", "order_quantity"]

# OPTIONAL: factors chosen for cross design
# factor name followed by list containing factor values to cross design over
#model_cross_design_factors = {}

# model_cross_design_factors = {}

# OPTIONAL: Provide additional overrides for model default factors.
# If empty, default factor settings are used.
Expand All @@ -34,10 +37,10 @@ def main():
# If empty, default factor settings are used.
# list of dictionaries that provide fixed factors for problems when you don't want to use the default values
# if you want to use all default values use empty dictionary, order must match problem names
solver_fixed_factors = [{"eta_1": .5, "eta_2": .4}, {"sample_size": 15}]
solver_fixed_factors = [{"eta_1": 0.5, "eta_2": 0.4}, {"sample_size": 15}]

# uncomment this version to run w/ only default solver factors
#sp;ver_fixed_factors = [{},{}]
# sp;ver_fixed_factors = [{},{}]

# Provide the name of a file .txt locatated in the datafarming_experiments folder containing
# the following:
Expand All @@ -52,7 +55,6 @@ def main():
# Specify the number stacks to use for ruby design creation
problem_n_stacks = 1


# Specify a common number of macroreplications of each unique solver/problem combination
# i.e., the number of runs at each design point.
n_macroreps = 3
Expand All @@ -70,26 +72,27 @@ def main():
crn_across_init_opt = True # Default

# Create DataFarmingExperiment object for model design
model_design_list = create_design(name=model_name,
factor_headers=model_factor_headers,
factor_settings_filename=model_factor_settings_filename,
n_stacks=problem_n_stacks,
fixed_factors=model_fixed_factors, #optional
#cross_design_factors=model_cross_design_factors, #optional
)

model_design_list = create_design(
name=model_name,
factor_headers=model_factor_headers,
factor_settings_filename=model_factor_settings_filename,
n_stacks=problem_n_stacks,
fixed_factors=model_fixed_factors, # optional
# cross_design_factors=model_cross_design_factors, #optional
)

# create proble name list for ProblemsSolvers (do not edit)
problem_names = []
for i in range(len(model_design_list)):
for _ in range(len(model_design_list)):
problem_names.append(problem_name)

# Create ProblemsSovlers experiment with solver and model design
experiment = ProblemsSolvers(solver_factors = solver_fixed_factors,
problem_factors = model_design_list,
solver_names = solver_names,
problem_names = problem_names
)
experiment = ProblemsSolvers(
solver_factors=solver_fixed_factors,
problem_factors=model_design_list,
solver_names=solver_names,
problem_names=problem_names,
)

# check compatibility of selected solvers and problems
experiment.check_compatibility()
Expand All @@ -98,16 +101,21 @@ def main():
experiment.run(n_macroreps)

# Postprocess the experimental results from each design point.
experiment.post_replicate(n_postreps=n_postreps,
crn_across_budget=crn_across_budget,
crn_across_macroreps=crn_across_macroreps)
experiment.post_normalize(n_postreps_init_opt=n_postreps_init_opt,
crn_across_init_opt=crn_across_init_opt)
experiment.post_replicate(
n_postreps=n_postreps,
crn_across_budget=crn_across_budget,
crn_across_macroreps=crn_across_macroreps,
)
experiment.post_normalize(
n_postreps_init_opt=n_postreps_init_opt,
crn_across_init_opt=crn_across_init_opt,
)

# Record and log results
experiment.record_group_experiment_results()
experiment.log_group_experiment_results()
experiment.report_group_statistics()


if __name__ == "__main__":
main()
main()
Loading
Loading