diff --git a/examples/critical-sphere/critical_sphere.py b/examples/critical-sphere/critical_sphere.py new file mode 100644 index 00000000..828be53c --- /dev/null +++ b/examples/critical-sphere/critical_sphere.py @@ -0,0 +1,26 @@ +import openmc +import numpy as np + +pu = openmc.Material() +pu.set_density("g/cm3", 19.84) +pu.add_nuclide("Pu239", 1) +mats = openmc.Materials([pu]) + +radius = {{radius}} + +fuel_sphere = openmc.Sphere(r=radius, boundary_type='vacuum') +fuel_cell = openmc.Cell(fill=pu, region=-fuel_sphere) +univ = openmc.Universe(cells=[fuel_cell]) +geom = openmc.Geometry(univ) + +settings = openmc.Settings() +settings.batches = 100 +settings.inactive = 20 +settings.particles = 20000 +settings.temperature = {"multipole": True, "method": "interpolation"} + + +mats.export_to_xml() +geom.export_to_xml() +settings.export_to_xml() +openmc.run() \ No newline at end of file diff --git a/examples/critical-sphere/critical_sphere_results.pkl b/examples/critical-sphere/critical_sphere_results.pkl new file mode 100644 index 00000000..0f9e1d8d Binary files /dev/null and b/examples/critical-sphere/critical_sphere_results.pkl differ diff --git a/examples/critical-sphere/critical_sphere_results_analysis.ipynb b/examples/critical-sphere/critical_sphere_results_analysis.ipynb new file mode 100644 index 00000000..6ea17230 --- /dev/null +++ b/examples/critical-sphere/critical_sphere_results_analysis.ipynb @@ -0,0 +1,124 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "69b90671-f392-488e-87ce-3008f07b1b3c", + "metadata": {}, + "outputs": [], + "source": [ + "from deap import base, creator, tools, algorithms\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np \n", + "import pickle\n", + "from numpy import pi\n", + "import operator" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d49c9d01-2bca-4be3-a49f-17a1d8cb3f00", + "metadata": {}, + "outputs": [], + "source": [ + "creator.create(\"obj\", base.Fitness, weights=(1.0,))\n", + "creator.create(\"Ind\", list, fitness=creator.obj)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8123d5c7-ebd9-47c4-9987-ad1b86552526", + "metadata": {}, + "outputs": [], + "source": [ + "checkpoint_file=\"critical_sphere_results.pkl\"\n", + "with open(checkpoint_file, \"rb\") as cp_file:\n", + " cp = pickle.load(cp_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a7ac55e0-e72c-4f5c-b0a5-ada6f862451d", + "metadata": {}, + "outputs": [], + "source": [ + "def get_ind_list(pop_list, index):\n", + " ind_list = [] \n", + " for pop in pop_list:\n", + " ind_list.append(pop[index])\n", + " return ind_list" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "287ef6be-aa75-4fc7-9c63-603fd0c2d329", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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0X/CsfXcwwvbHLAtA2jXT3992nrR8jDa5dqWquEw27mHbesnwdaXyLa9RYCHwbBhCkw6NvzjRQ5d05mw41WybVuL3tO3Fb6nfb50L3p+yPuLm5c4Pr5t0F9/MOrPb6sFZrozc1odP9zzB9i/O9zfaeFVLEfNgNTrJboYyMmMAZ7wGFCzgfZ1aHXlAmEUQnvX3cmHVYKC9XiAzIfYEu0yWTL7W8l07SdtGarIkqqqIV0/LjzDRSYKT1GoKvF8wOFoKHnRMikT5kLbVrJdbeG/+XQdnHARnP/NhAsbGAVAEZHBdsk93HVHODQ0F12abC0jTRAAQXh5aFU0mEXnXn5R/35+mnkvt530ShioJx2TaJkj3sNfhNV300U11fTA8ReNqMuXylL0nnZSRQ0ZvadH6uEvwnM/gFRNeI/6/I+M+vcz+u03dH+cR1endJOmxjJw6hFenVLp4r9HM51QM3bE3AeoACgiIuUtCtStra1w0TVJVzM6DPZZasm9pwVfVMjha98aXj4fn/JJjow+o4NrBP8eVQAUERGpNDpLPfj0RcXgGsopnyrVJffwPqBm1SpYos/oERvBv0dHxh2nIiIiIiIicsQUAEVERERERCqEAqCIiIiIiEiFUAAUERERERGpEAqAIiJS9u6/+gyuX1yXdBkiIiIjngKgiIiIiIhIhVAAFBERERERqRAKgCIiIiIiIhVCAVBERERERKRCKACKiIiIiIhUCAVAERERERGRCqEAKCIiIiIiUiHSSRcgIiIiIiIy0tx/9RlJl3BYdAZQRERERESkQigAioiIiIiIVAgFQBERERERkQqhACgiIiIiIlIhNAiMiMgQGKk3houIiMjopgAoIiJSgfQlhYhIZdIloCIiIiIiIhVCAVBERERERKRCKACKiIiIiIhUCAVAERERERGRCqEAKCIiIiIiUiEUAEVERERERCqEAqCIiIiIiEiFUAAUERERGQT3X30G1y+uS7oMEZEDUgAUERERERGpEAqAIiIiIiIiFUIBUEREREREpEIoAIqIiIiIiFQIBUAREREREZEKoQAoIiIiIiJSIRQARUREREREKoQCoIiIiIiISIVQABQREREREakQCoAiIiIiIiIVQgFQRERERESkQigAioiIiIiIVIjEA6CZpczseTP7eYl9S8xst5m9ED3+JokaRURERERERoN00gUAXwDW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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Radius plot\n", + "logbook = cp[\"logbook\"]\n", + "gen = logbook.select(\"gen\")\n", + "rad_avg = get_ind_list(logbook.chapters[\"oup\"].select(\"avg\"), 0)\n", + "rad_std = get_ind_list(logbook.chapters[\"oup\"].select(\"std\"), 0)\n", + "rad_min = get_ind_list(logbook.chapters[\"oup\"].select(\"min\"), 0)\n", + "rad_max = get_ind_list(logbook.chapters[\"oup\"].select(\"max\"), 0)\n", + "fig, ax = plt.subplots(figsize=(15,7))\n", + "ax.errorbar(gen, rad_avg, yerr=rad_std, label=\"Ave radius\")\n", + "ax.plot(gen, rad_min, \"*-\", label=\"Min radius\")\n", + "ax.plot(gen, rad_max, \"*-\", label=\"Max radius\")\n", + "ax.set_xlabel(\"Generation\", fontsize=18)\n", + "ax.set_ylabel(\"Radius\", fontsize=18)\n", + "ax.grid()\n", + "handles, labels = ax.get_legend_handles_labels()\n", + "ax.legend(handles, labels, fontsize=18)\n", + "fig.savefig('radius-convergence.png',bbox_inches='tight', dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0284fa3a-8c42-4250-aea6-4ef7273ec086", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/critical-sphere/rollo_critical_sphere.json b/examples/critical-sphere/rollo_critical_sphere.json new file mode 100644 index 00000000..cc15f073 --- /dev/null +++ b/examples/critical-sphere/rollo_critical_sphere.json @@ -0,0 +1,30 @@ +{ + "control_variables": { + "radius": {"min": 1.0, "max": 8.0} + }, + "evaluators": { + "openmc": { + "input_script": "critical_sphere.py", + "inputs": ["radius"], + "outputs": ["keff", "radius"], + "keep_files": false + } + }, + "constraints": {"keff": {"operator": [">="], "constrained_val": [1.0]}}, + "algorithm": { + "parallel": "multiprocessing", + "objective": ["min"], + "optimized_variable": ["radius"], + "pop_size": 80, + "generations": 10, + "mutation_probability": 0.23, + "mating_probability": 0.46, + "selection_operator": {"operator": "selTournament", "inds": 15, "tournsize": 5}, + "mutation_operator": { + "operator": "mutPolynomialBounded", + "eta": 0.23, + "indpb": 0.23 + }, + "mating_operator": {"operator": "cxBlend", "alpha": 0.46} + } +} diff --git a/examples/fhr-slab/rollo_input.json b/examples/fhr-slab/rollo_input.json index 076ff176..9a0b0e06 100644 --- a/examples/fhr-slab/rollo_input.json +++ b/examples/fhr-slab/rollo_input.json @@ -6,7 +6,7 @@ }, "evaluators": { "openmc": { - "input_script": "openmcinp.py", + "input_script": "openmc_input.py", "inputs": ["sine_a", "sine_b", "sine_c"], "outputs": ["keff"], "keep_files": false @@ -16,17 +16,6 @@ "algorithm": { "parallel": "multiprocessing", "objective": ["max"], - "optimized_variable": ["keff"], - "pop_size": 4, - "generations": 10, - "mutation_probability": 0.2374127402121101, - "mating_probability": 0.4699131568275016, - "selection_operator": {"operator": "selTournament", "inds": 1, "tournsize": 5}, - "mutation_operator": { - "operator": "mutPolynomialBounded", - "eta": 0.2374127402121101, - "indpb": 0.2374127402121101 - }, - "mating_operator": {"operator": "cxBlend", "alpha": 0.4699131568275016} + "optimized_variable": ["keff"] } } diff --git a/rollo/executor.py b/rollo/executor.py index 8b461208..24c5bdb7 100644 --- a/rollo/executor.py +++ b/rollo/executor.py @@ -54,8 +54,9 @@ def execute(self): t0 = time.time() input_dict = self.read_input_file() iv = InputValidation(input_dict) + iv.add_all_defaults() iv.validate() - complete_input_dict = iv.add_all_defaults(input_dict) + complete_input_dict = iv.input # organize control variables and output dict control_dict, output_dict = self.organize_input_output(complete_input_dict) # generate evaluator function diff --git a/rollo/input_validation.py b/rollo/input_validation.py index 5cfd1fc8..0092ea25 100644 --- a/rollo/input_validation.py +++ b/rollo/input_validation.py @@ -4,9 +4,9 @@ class InputValidation: """The InputValidation class contains methods to read and validate the JSON - ROLLO input file to ensure the user defined all key parameters. If the user - did not, ROLLO raises an exception to tell the user which parameters are - missing. + ROLLO input file to ensure the user defined all key parameters. If the + user did not, ROLLO raises an exception to tell the user which + parameters are missing. Attributes ---------- @@ -18,8 +18,8 @@ class InputValidation: def __init__(self, input_dict): self.input = input_dict - def add_all_defaults(self, input_dict): - """ Goes through the entire input_dict and adds default inputs if they + def add_all_defaults(self): + """Goes through the entire input_dict and adds default inputs if they are missing from the input_dict Parameters @@ -33,6 +33,7 @@ def add_all_defaults(self, input_dict): input file dict with additional missing default inputs """ + input_dict = self.input.copy() input_evaluators = {} for solver in input_dict["evaluators"]: input_evaluators[solver] = input_dict["evaluators"][solver] @@ -41,26 +42,37 @@ def add_all_defaults(self, input_dict): ) input_algorithm = input_dict["algorithm"] input_algorithm = self.default_check(input_algorithm, "objective", "min") - input_algorithm = self.default_check(input_algorithm, "pop_size", 100) + input_algorithm = self.default_check(input_algorithm, "pop_size", 60) input_algorithm = self.default_check(input_algorithm, "generations", 10) input_algorithm = self.default_check( - input_algorithm, "selection_operator", {"operator": "selBest", "inds": 1} + input_algorithm, "mutation_probability", 0.23 + ) + input_algorithm = self.default_check( + input_algorithm, "mating_probability", 0.47 + ) + input_algorithm = self.default_check( + input_algorithm, + "selection_operator", + {"operator": "selTournament", "inds": 15, "tournsize": 5}, ) input_algorithm = self.default_check( input_algorithm, "mutation_operator", - {"operator": "mutGaussian", "indpb": 0.5, "mu": 0.5, "sigma": 0.5}, + {"operator": "mutPolynomialBounded", "eta": 0.23, "indpb": 0.23}, ) input_algorithm = self.default_check( - input_algorithm, "mating_operator", {"operator": "cxOnePoint"} + input_algorithm, + "mating_operator", + {"operator": "cxBlend", "alpha": 0.46}, ) reloaded_input_dict = input_dict.copy() reloaded_input_dict["evaluators"] = input_evaluators reloaded_input_dict["algorithm"] = input_algorithm - return reloaded_input_dict + self.input = reloaded_input_dict.copy() + return def default_check(self, input_dict, variable, default_val): - """Checks if a single variable is missing from a dict, and adds a + """Checks if a single variable is missing from a dict, and adds a default value if it is Parameters @@ -217,8 +229,8 @@ def validate_algorithm(self, input_algorithm, input_evaluators): # k value cannot be larger than pop size if input_algorithm["selection_operator"]["operator"] == "selTournament": if ( - input_algorithm["selection_operator"]["inds"] > - input_algorithm["pop_size"] + input_algorithm["selection_operator"]["inds"] + > input_algorithm["pop_size"] ): raise Exception("Population size must be larger than inds.") return @@ -257,9 +269,9 @@ def validate_algorithm_operators(self, operator_type, input_algorithm): op_op = op["operator"] except KeyError: print( - " You must define an operator for the " + - operator_type + - "_operator" + " You must define an operator for " + + operator_type + + "_operator" ) raise else: @@ -461,11 +473,12 @@ def validate_evaluators(self, input_evaluators): a = input_evaluators[evaluator]["output_script"] except KeyError: print( - " You must define an output_script for evaluator: " + - evaluator + - " since the outputs: " + - str(which_strings) + - " are not inputs or pre-defined outputs." + "" + + "You must define an output_script for evaluator: " + + evaluator + + " since the outputs: " + + str(which_strings) + + " are not inputs or pre-defined outputs." ) raise return @@ -511,12 +524,12 @@ def validate_in_list(self, variable, accepted_variables, name): """ assert variable in accepted_variables, ( - " variable: " + - name + - ", only accepts: " + - str(accepted_variables) + - " not variable: " + - variable + " variable: " + + name + + ", only accepts: " + + str(accepted_variables) + + " not variable: " + + variable ) return @@ -544,19 +557,19 @@ def validate_correct_keys( a = dict_to_validate[key] for key in dict_to_validate: assert key in combined_key_names, ( - " Only " + - str(combined_key_names) + - " are accepted for " + - variable_type + - ", not variable: " + - key + " Only " + + str(combined_key_names) + + " are accepted for " + + variable_type + + ", not variable: " + + key ) except KeyError: print( - " " + - str(key_names) + - " variables must be defined for " + - variable_type + " " + + str(key_names) + + " variables must be defined for " + + variable_type ) raise except AssertionError as error: