Change Log#
0.9.5 (6 August 2024)#
Fixes a bug that causes delayed mobilizations. The underlying cause was the lack of resetting the index column of
WombatEnvironment.weather
after filtering out rows that exist prior to the starting year of the simulation.The Polars minimum version was bumped to avoid a deprecation error with the previous index column generation method.
0.9.4 (1 July 2024)#
Adds support for Python 3.11 and 3.12.
Adds the following capability and servicing equipment codes:
MCN for medium cranes, which should enable greater options for land-based wind.
VSG for vessel support groups, or any representation of multiple vessels used for a single operation.
Updates Polars API usage to account for a series of deprecation and future warnings.
Changes the metrics demonstration to use the COREWIND Morro Bay in situ example, and adds the availability plotting to the demonstration example.
RepairRequest.prior_operating_level
has been added to allow 100% reduction factor failures to correctly and consistently restore the operating level of a subassembly following a repair.Replaces the
valid_reduction
attrs validator withvalidate_0_1_inclusive
to reuse the logic in multiple places without duplicating checking methods.Adds a
replacement
flag for interruption methods, so that a failure or replacement comment can be added as a cause forsimpy.process.interrupt
. This update allows the failure and maintenance processes to check if an interruption should cause the process to exit completely. Additionally, the forced exit ensures that processes can't persist after a replacement event when a process is recreated, which was happening in isolated cases.Fixes a bug in
RepairManager.purge_subassemble_requests()
where the pending tows are cleared regardless of whether or not the focal subassembly is the cause of the tow, leading to a simulation failure.Fixes a bug in
utilities/utilities.py:create_variable_from_string()
to operate in a way that is expected. The original method was removing all numerics, but only leading punctuation and numerics should be replaced, with any punctuation being replaced with an underscore.Adds additional inline comments for clarification on internal methods.
Update README.md to be inline with current conda and Python standards.
Fully adopts
functools.cache
now that older Python versions wherefunctools.lru_cache
was the available caching method.Fixes a Pandas
FutureWarning
by removing a now unnecessary piece of code inwombat/core/post_processor.py:equipment_costs
v0.9.3 (15 February 2024)#
Reinstate the original time-based availability methodology, which is based on all turbines, not the wind farm total.
Replace the
black
formatter withruff
.Adopt
pyupgrade
to ensure modern Python language usage.Add the NumPy 2.0 integration tool to Ruff.
v0.9.2 (13 November 2023)#
General#
Adds the PowerPoint file used in the NAWEA/WindTech 2023 Workshop.
Updates all coming soon links and typos.
Bug Fixes#
Fixes an edge-case introduced in v0.9.1 where traveling during a crew transfer process is able to occur after the end of the simulation period.
The documentation has been completely converted to a Jupyter Book paradigm due to a build issue found in the GitHub Actions.
v0.9.1 (27 October 2023)#
Removes the pre-public release analysis data and results, located at
library/original-outdated
, from the repository, but can be found in all releases prior to v0.9. This is being done to manage the package size and ensure it can be published to PyPI.
v0.9 (27 October 2023)#
Bug Fixes#
Repairs that had a weather delay extended repairs past the end of the shift now properly extend the repair into future shifts instead of completing early. This has a small negative impact on availability because that means some repairs can take longer than they had originally.
Traveling to a system for a repair where the timing extends beyond the end of the shift, but into the next shift, is now registered as a shift delay just like travel weather delays that extend beyond the end of the current shift but before the start of the next shift. This has a small positive impact on availability because a turbine or cable may not start being repaired until weather is more consistently clear, rather than starting it and extending it for many shifts.
Windfarm.cable()
now correctly identifies 2 and 3 length cable naming conventions to differentiate which version of the cable id is being retrieved.An edge case where events occurred just after the end of a simulation has been resolved by checking the datetime stamp of that event and not adding any action log to the simulation that is after the
WombatEnvironment.end_datetime
.A bug in how the total wind farm operating level was calculated is updated to account for substation downtime, rather than using a sum of all turbine values.
Metrics.time_based_availability
andMetrics.production_based_availability
have been updated to use to take advantage of the above fix. Similarly, the time-based availability skews higher now, as is expected when taking into account all availability greater than 0, and the energy-based availability drops moderately as a result of accounting for the substation downtime.
General Updates#
Metrics.equipment_labor_cost_breakdowns
now has aby_equipment
boolean flag, so that the labor and equipment costs can be broken down by category and equipment. Additionally,total_hours
has been added to the results, resulting in fewer computed metrics across the same set of breakdowns."request canceled" and "complete" are now updated in the logging to directly state if it's a "repair" or "maintenance" task that was completed or canceled to ensure consistency across the logging messages. As a result,
Metrics.task_completion_rate()
can now correctly differentiate between the completed tasks effectively.The use of unique naming for the servicing equipment is now enforced to ensure that there is no overlap and potential confusion in the model.
New, experimental plotting functionality has been added via
wombat.utilities.plot
.plot_farm_layout
plots the graph layout of the farm. Note that this will not work if realistic lat/lon pairs have not been provided in the layout CSV.plot_farm_availability
plots a line chart of the monthly overall windfarm availability. Additional toggles allow for the plotting of individual turbines in the background and/or a 95% confidence interval band around the farm's availabilityplot_detailed_availability
plots a heatmap of the hourly turbine and farm operational levels to help in debugging simulations where availability may be running suspiciously low (i.e., a turbine might have shut down or a cable failure didn't get repaired within a reasonable time frame).
Simulation.service_equipment
is now a dictionary to provide clear access to the servicing equipment details.Simulation.from_config()
requires both a library input and a file name input for the configuration after deprecating thelibrary
field from the configuration requirements due to it being cumbersomeMetrics.opex()
provides the opex output by category ifby_category
is set to beTrue
Methodology Updates#
Subassemblies and cables are now able to resample their next times to failure for all maintenance and failure activities, so that replacement events reset the timing for failures across the board.
Systems are no longer interrupted once the servicing equipment addressing a repair or maintenance task is dispatched, and instead are interrupted just before the crew is transferred to begin repair, maintenance, or unmooring. This has a small net positive increase in the availability for short travel distances, but can vary if the travel time is more than a few hours (i.e., large distance to port, slow travel due to weather, & etc.)
When a tow to port repair is in the queue, no other repairs or maintenance activities will occur for that turbine until it's brought into port for repairs.
Deprecations#
The original library structure has been fully deprecated, please see the Reference/How To example for more details on converting data that has not yet been updated.
All PySAM functionality has been deprecated as it's no longer relevant to this work.
The
Simulation.config
no longer requires thelibrary
field to reduce conflicts with sharing data between users.
v0.8.1 (28 August 2023)#
Fixes a bug where servicing equipment waiting for the next operational period at the end of a simulation get stuck in an infinite loop because the timeout is set for just prior to the end of the simulation, and not just after the end of the simulation's maximum run time.
v0.8.0 (16 August 2023)#
Bug Fixes#
Most of the
# type: ignore
comments have been removed, or the past errors have been resolvedFailure and maintenance logic in the
Cable
andSubassembly
models have been wrapped inif
/else
blocks to ensure previously unreachable code still can't be reached under limited conditionsFixes a bug in where the mobilization duration is logged. Previously, the mobilization duration was logged upon completion, but now is logged while during the actual mobilizing, with costs still being logged upon completion.
Fixes an uncommon error where repairs are made twice causing the simulation to fail. This was caused by a control mismatch in the unscheduled repair process, and was fixed by better tracking and controlling when a repair moves from "pending" (submitted), to "processing" (handed off to the servicing equipment for repair or to the port for a tow-to-port repair cycle), to "completed" (the repair is registered as complete). Additionally, the servicing equipment no longer relies on receiving the first repair from the repair manager on dispatch, and follows the same
get_next_request()
logic that will occur following the initial dispatch and repair.Fixes an error where a repair has
replacement=True
andoperation_reduction
< 1 both resets theoperating_level
back to 1 and readjusts for theoperation_reduction
, which can causeoperating_level
> 100%ServiceEquipment.crew_transfer()
uses a while loop in place of anif
with recursion strategy to handle unsafe transfer conditions to continuously wait until the next shift's available window.
Features#
Adds a
non_stop_shift
attribute toServiceEquipmentData
,UnscheduledServiceEquipmentData
,ScheduledServiceEquipmentData
, andPortConfig
that is set in the post-initialization hook or throughDateLimitsMixin._set_environment_shift()
to ensure it is updated appropriately. Additionally, all checks for a 24 hour shift now check for thenon_stop_shift
attribute.Metrics.emissions()
has been added to the list of available metrics to calculate the emissions from idling at port or sea, tranisiting, and maneuvering. Co-authored by and inspired by analysis work from @hemezz.Simulation
now accepts arandom_seed
orrandom_generator
variable to seed the random number generators for Weibull failure timeouts and wait timing between event completions. Setting therandom_seed
to the same value from one simulation to the next will net the same results between different simulations, whereas therandom_generator
can be used to use the same generator for a batch of simulations.
General#
All
assert
statements are now only called when type checking is performedReplaces all
.get(lamda x: x == request)
with a 10x faster.get(lambda x: x is request)
to more efficiently filter out the desired event to be removed from the repair manager and port repair management.WombatEnvironment.weather
is now a Polars DataFrame to improve efficiency and indexing bottlenecks introduced in Pandas 2.0.All subassembly cable files are read in once, and stored in a dictionary to provide a modest speed up for the simulation initialization.
v0.7.1 (4 May 2023)#
Features
Metrics.process_times()
now includes the time_to_start, representing the time between when a request is submitted, and when the repairs officially start.Expand the acceptable date formats for the weather profiles to allow for year-first.
v0.7.0 (3 May 2023)#
Replace Flake8 and Pylint in the pre-commit workflow with ruff, and fix/ignore the resulting errors as appropriate
Features:
Weather data now has the ability to contain more than just the required "windspeed" and "waveheight" columns. This will allow for easier expansion of the weather model in the future, and increase compatibility with other NREL techno economic modeling frameworks.
Bug fixes:
Maintenance and failure simulation process interruptions were occuring prior to starting the process timing, and causing simulation failures.
Duplicated parameters were being processed in
WombatEnvironment.log_action
stemming from improper handling of varying parameters in some of the more complex control flow logic in in situ repairs.Another edge case of negative delays during crew transfers where there is insufficient time remaining in the shift after account for weather, so the method was called recursively, but not exiting the original loop.
Port
management of in situ and tow-to-port capable tugboats wasn't properly accounting for tugboats of varying capabilities, and assuming all tugboats could do both. The vessel management and repair processing were out of sync causing duplicated turbine servicing/towing.RepairManager
has consolidated the dispatching of servicing equipment to be the following categories instead of the previously complex logic:If a request is a tow-to-port category, have the port initiate the process
If the dispatching thresholds are met, then have the port initiate a repair for port-based servicing equipment, otherwise the repair manager will dispatch the appropriate servicing equipment.
ServiceEquipment.weather_delay()
no longer silently processes a second weather delay.Intra-site travel is now correctly logging the distance and duration of traveling between systems at the site by moving the location setting logic out of
crew_transfer
method and being entirely maintained within, or next to, thetravel
method ofServiceEquipment
.RepairManager
now properly waits to dispatch servicing equipment until they are no longer under service from another servicing equipment unit.Servicing equipment are no longer simultaneously dispatched from both the
Port
andRepairManager
causing simulations to potentially error out when theSystem.servicing
orCable.servicing
statuses are overridden by the second-in-line servicing equipment. This was resolved by the port waiting for the turbine, a tugboat, and a spot at port to become available, then immediately halting the turbine, and starting the tow-in logic.Missing
ServiceEquipment.dispatched
status updates have been amended, so no matter the operation, a piece of servicing equipment should be set todispatched = True
until the crew is back and repair is completed.To avoid multiple dispatches to a single turbine, cable, or substation, or multiple dispatches of a single vessel/onsite equipment, a random timeout between 0 and 30 seconds (in simulation time) is processed, then a status double-checking occurs.
Metrics.process_times()
now includes the "N" column to indicate the number of processes that fall into each category.
v0.6.2 (3 February 2023)#
Warnings from Pandas
.groupby()
calls have been silenced by shifting the column filtering to before the groupby method call.Fixed the towing to port logging message, and subsequent
Metrics.number_of_tows()
search criteria to correctly calculate the number of tows in each direction.Fixes a bug in the crew transfer logic where the travel time back to port is longer than the weather delay itself, and a negative time delay is incorrectly attempted to be processed.
v0.6.1 (31 January 2023)#
A hot fix for the code comparison data not being found when installing from PyPI, which was caused by missing
__init__.py
files in the reconfigured library structure.
v0.6.0 (10 January 2023)#
In v0.6, due to a series of bug fixes, logic improvements, and feature additions (all described below), users can expect mild to significant shifts in their results. These shifts, while startling, move WOMBAT towards more accurate results now that servicing equipment can't be dispatched multiple times in a row, statuses can't be reset without failure. Additionally, in our validation cases this has led to an average speedup of 71%, or 3.5x faster run times.
New and Updated Features#
Environmental and logistics considerations via prohibited operations periods and speed reduction periods.
All periods can be set for each servicing equipment, or across the board when set at the environment level
For ports, the same logic applies where the environment can set the port variables and the port can set its associated tugboats' variables
When a setting is defined in multiple locations, the more conservative restriction is applied
Variables
non_operational_start
,non_operational_end
create the annualized period where operations are prohibited, resulting in the creation of the arraynon_operational_dates
and setnon_operational_dates_set
.Variables
reduced_speed_start
,reduced_speed_end
create the annualized period where the maximum speed,reduced_speed
, for all operations is imposed, resulting in the creation of the arrayreduced_speed_dates
and setreduced_speed_dates_set
.
Export Cables
Models the export cabling system as a single cable between the substation and the interconnection point or as a connection between multiple substations. For multiple connected substations, the model assumes they are independent systems.
Adds support for "type" in the wind farm layout CSV file, which should be filled with either "substation" or "turbine". This column supports multi-substation farms so that accurate plots and connections can be made. For instance, multiple connected substations, can now be accurately rendered and modeled in the farm.
Adds support for "upstream_cable_name" in the wind farm layout CSV file, to provide an individualized name to a cable in place of using the name field in the cable settings file for all similar cables.
New library structure that mirrors ORBIT (see below diagram)! In v0.7, the original library structure will be officially deprecated in favor of the below, and during the v0.6 lifecycle a warning will be raised to instruct users where to place and structure folders going forward.
<library> ├── project ├── config <- Project-level configuration files ├── port <- Port configuration files ├── plant <- Wind farm layout files ├── cables <- Export and Array cable configuration files ├── substructures <- Substructure configuration files ├── turbines <- Turbine configuration and power curve files ├── vessels <- Land-based and offshore servicing equipment configuration files ├── weather <- Weather profiles ├── results <- The analysis log files and any saved output data
Adds
create_library_structure
towombat.core.library
so that users can create the appropriate folder structure for a new project without having to manually create each and every folder.
Maintenance.operation_reduction
has been enabled to better resemble the effect of unaddressed maintenance.Failure
now has a boolean flag forreplacement
to indicate if a replacement is required, which allows for operational shutdowns without necessitating a full replacement of the subassembly. Additionally, this flag enables a replacement event for non-shutdown failures.
General Improvements#
Bump Python versioning requirements to 3.8+
Add PyArrow dependency for fasting save/load processes for CSV reading and writing
Convert boolean operational statuses for
System
,Subassembly
,Cable
, andServiceEquipment
to SimPy events for more efficient processing and accurate delays for restartingFix numerous bugs in the repair logic introduced by the use of boolean checks and status switches, which also improve simulation performance. These issues were primarily caused by erroneously resetting the status, but with the new event setting and
.succeed()
logic to clear an operation, the previously incorrect resetting is much harder to do.Continue to improve the performance of low-level simulation operations to realize further improvements in memory usage and simulation performance
Logging is now based on directly writing to CSV in place of the
logging
-based infrastructureAll underlying infrastructure withing the simulation have also been updated to accommodate the different file types, which allows for more direct interaction at the end of the simulation and enables PyArrow CSV read/write
This enables:
deprecation warnings to be passed directly to the terminal/notebook without interfering with the file handling
reasonable speedups to simulation times by not having additional overhead from the logging and buffering
Metrics.process_times()
has been converted to efficient pandas code for fast computation.The Metrics example usage documentation page has been rewritten and reformatted to provide more helpful information to users
Metrics
methods now accurately account for the effect of substation operating reductions on upstream turbines so that each substation's subgraph multiplies the turbine operating capacity by the substation operating capacity.Fixes a bug in the
RepairManager.get_next_highest_severity_request()
where requests aren't processed in first in, first out order with a severity level priority.Remove duplicated logic in the
Subassembly
andCable
maintenance and failure modeling ensuring that repetitive logic is identical between scenarios.
0.5.1 (22 July 2022)#
Updates to use the most recent pandas API/recommendations, which fixes numerous warnings in the
Metrics
classFixes inconsistency in returning floats vs
DataFrame
s in theMetrics
classUpdates the examples to work with the returned
DataFrame
values, and adds warnings about the change in usageUpdates the documentation configuration to be compatible with the latest sphinx book theme API usage
Adds a potential fix to an occasional issue where the logging files can't be deleted using
WombatEnvironment.cleanup_log_files()
because the file is still considered to be in use
0.5.0 (30 June 2022)#
Adds capabilities: "TOW" and "AHV" for tugboat/towing equipment and anchor-handling vessels
Adds a tow-to-port strategy that is activated for repairs with the "TOW" capability in the servicing
Adds a
Port
class to handle the tow-to-port class and tugboat-based service requestsAllows for any name to define the subassemblies of a turbine or substation to enable users to use the naming conventions they are most familiar with or most meaningful for their own work
Minor bug fixes in the
Metrics
class to improve stability, improve code reuse, and documentation\Adds nearly all documentation updates from PR #39 as a result of an internal code review, but makes the changes in the source files that generate the example notebooks, so is not a direct merge
Adds an annual fee to
PortConfig.annual_fee
that gets applied monthly, though is not included in any metrics yet.Adds
UnscheduledServiceEquipmentData.tow_speed
to differentiate between towing speeds and traveling speeds required between port and site, and implements the towing speed application appropriatelyAdds a
location
flag to the events logging infrastructure and implements its usage across the simulation architectureCreates the metric
Metrics.number_of_tows
to track the number of tows and provides breakdowns as neededCreates the metric
Metrics.vessel_crew_hours_at_sea
to track the number of vessel or crew hours at seaCreates the metric
Metrics.port_fees
to calculate any port fees associated with a projectCreates the metric
Metrics.opex
to calculate a project's operational expendituresCreates the metric
Metrics.NPV
to calculate a project's net present valueModifies
Metrics.project_fixed_costs
to have more time resolutions to align with the OpEx calculation optionsFixes some results formatting inconsistencies in the
Metrics
class
0.4.1 (2022-March-8)#
Adds code diagrams to demonstrate how the various components connect
Updates the documentation to be better in line with the current state of the software
Fixes a bug that allowed the x_metrics_inputs.yaml file to persist after the cleanup method is called.
Updates the provided library content structure to account for future updates
0.4.0 (2022-February-4)#
Testing now included!
pathlib.Path
is used in place ofos
throughout for easier to read file maneuvering.attrs.define
andattrs.field
have been adopted in place ofattr.s
andattr.ib
, respectively.Typing style is updated for future python type annotations as, e.g.,
Union[List[str], str]
->list[str] | str
.Unused imports have been further cleaned up.
Better caching of commonly computed values for faster simulations
Simulation metrics are now able to be saved for later reloading and use.
Minor documentation updates, mostly in the examples section for changed API usage.
Validation cases have been re-run for the most up-to-date version.
wombat.windfarm.system.System
no longer requires every subassembly model to be defined for increased flexibility and ease of definition of turbine simulationswombat.utilities.hours_until_future_hour()
correctly moves to the expected hour in the future, regardless of the number of days that are added.The IEA Task 26 validation cabling vessel was renamed from "cabling.yaml" to "cabling_scheduled.yaml" for consistent naming conventions.
Improved error messages throughout.
wombat.core.simulation_api.Simulation
no longer acceptsname
as an input, and reads it directly from the configuration.wombat.core.simulation_api.Simulation.run
now has acreate_metrics
flag that defaults toTrue
to indicate if the metrics suite should be created, so thatFalse
can be used if numerous analyses will be run and post-processed after the fact.wombat.core.simulation_api.Simulation.save_metrics_inputs
added to allow for saving the elements required to recreate aMetrics
object at a later point in time.wombat.core.environment.WombatEnvironment.workday_start
andwombat.core.environment.WombatEnvironment.workday_end
are better validated for edge cases.wombat.core.environment.WombatEnvironment._weather_setup
validates the start and end points against the provided weather profile and against each other to ensure they are valid boundaries.wombat.core.environment.WombatEnvironment.cleanup_log_files
will only try to delete files that actually exist to avoid unexpected simulation failures at the last step.wombat.core.environment.WombatEnvironment.date_ix
acceptsdatetime.datetime
anddatetime.date
inputs to avoid unnecesary errors or manipulations in a simulation.wombat.core.environment.WombatEnvironment.log_action
now only accepts numeric inputs forsystem_ol
andpart_ol
.wombat.core.environment.WombatEnvironment.weather_forecast
now rounds the starting time down to include the current hour, which fixes a bug in some edge cases where a crew transfer at the end of the shift gets stuck and has to wait until the next shift despite ample time to transfer.wombat.core.environment.WombatEnvironment.is_workshift
correctly accounts for around the clock shifts.wombat.core.data_classes.annual_date_range
now usesnumpy.hstack
to construct 1-D multiple year date ranges to ensure there is no nesting of data.wombat.core.repair_management.RepairManager.submit_request
will only attempt to deploy servicing equipment for strategies that have been initialized to reduce unnecessarily running code.wombat.core.repair_management.RepairManager.get_request_by_turbine
was renamed towombat.core.repair_management.RepairManager.get_request_by_system
to explicitly include substations. to remove repeated calculations and checks.wombat.core.repair_management.RepairManager.get_request_by_severity
request checking was optimized to remove repeated calculations and checks.wombat.core.repair_management.RepairManager.purge_subassembly_requests
no longer prematurely exits the loop to purge unnecessary requests from the logs in case of a replacement being required. Additionally, anexclude
parameter has been added for niche use cases where all but a couple of requests will need to be removed.wombat.core.service_equipment.ServiceEquipment
has more attributes for tracking its location throughout a simulation.wombat.core.service_equipment.ServiceEquipment.find_uninterrupted_weather_window
now rounds float inputs up to the nearest whole number to ensure the proper length window is retrieved.wombat.core.service_equipment.ServiceEquipment.find_interrupted_weather_window
usesmath.ceil
in place ofnp.ceil().astype(int)
for strictly python data types in computation.wombat.core.service_equipment.ServiceEquipment.travel
consistently resets the location attributes when moving between site and port to fix bugs in the end location.wombat.core.service_equipment.ServiceEquipment.crew_transfer
now indicates when the crew is actually being transferred, and updates the equipment's location post-transfer. Additionally, the travel time in delays is now accounted for, so the actually elapsed time is accounted for in processing weather delays. A bug in processing weather delays is fixed and uses the correctSimPy
timeout call so that the simulation does not get stuck due to improper calling.wombat.core.service_equipment.ServiceEquipment.process_repair
adds a safety window to account for the crew having enough time to safely transfer back to the equipment. This logic is likely not entirely fixed, but is sufficiently fixed for the time being.wombat.core.service_equipment.ServiceEquipment.process_repair
:fixes a bug in the hours to process calculation by reconfiguring the control flow for both simplicity and accuracy.
Additionally, the equipment will travel back to port if the work shift is over, so the equipment does not skip steps the repair logic.
Weather delays will also not be processed if the actual repair is finished, and will be moved to the crew transfer step.
The hours required vs hours available is reset for equipment that have around the clock shifts, so the timing is not arbitrarily capped, which also reduces the number of steps in the simulation.
The work shift indicator check now accounts for the equipment's specific work shift settings, and not the environment's to ensure the proper operating parameters are used.
The control flow for if there isn't enough time to perform the repair is updated to accurately account for when and where the equipment needs to travel
Cables are no longer retrieved through system and causing an error when processing their repairs.
wombat.core.service_equipment.ServiceEquipment._calculate_intra_site_time
now accounts for a speed of 0 km/hr so that function will not error out when there is a travel distance, but no speed.wombat.core.service_equipment.ServiceEquipment.run_scheduled
now sets theonsite
variable for equipment that are always on site for more consistent handling of the onsite attribute.wombat.core.service_equipment.ServiceEquipment.wait_until_next_operational_period
now resets the equipment's location attributes so its location can't incorrectly persist from the last step.wombat.core.service_equipment.ServiceEquipment.register_repair_with_subassembly
correctly retrieves the cable information for upstream cables to be reset.wombat.core.post_processor.Metrics.service_equipment_utilization
has a new methodolgy that uses the actual number of days in operation instead of a backwards computation that consistently and accurately accounts for the days where the servicing equipment is in operation. Additionally, the filtering is updated to match the filter for total days, which also improves accuracy of results.wombat.core.post_processor.Metrics.from_simulation_outputs
classmethod was added to easily load simulation data for after-the-fact analyses.wombat.windfarm.Windfarm
operations logging message generation routines were optimized.wombat.windfarm.Windfarm.system
was created in place ofwombat.windfarm.Windfarm.node_system
as a convenience method for grabbing theSystem
object from the windfarm graph layout.wombat.windfarm.Windfarm.cable
was created to replicate thesystem
method for cable objects.wombat.windfarm.Windfarm
,wombat.windfarm.system.cable.Cable
, andwombat.windfarm.system.system.System
all have an operating level property that is the current operating level and one that does not account for if a system is being serviced, and therefore registered as non-operational. This fixes a bug in the dispatching of unscheduled service equipment when a repair request is submitted while a repair is occurring that drops the operating level below the strategy threshold. In the dispatching check we now are able to consider the operating level before a system was shut down for repairs and avoid improper dispatching.wombat.windfarm.system.cable.Cable
now takesend_node
in place ofupstream_nodes
to simplify the initialization process and be more explicit about the starting and ending points on the cable.wombat.windfarm.system.cable.Cable.interrupt_subassembly_processes
is nowinterrupt_processes
and only interrupts the cable's own maintenance and failure simulation processes.wombat.windfarm.system.cable.Cable.interrupt_all_subassembly_processes
wrapsinterrupt_processes
to ensure similar functionality between system and subassembly methods for use in the simulations.wombat.windfarm.system.cable.Cable
logging now properly records itself as the target of repairs and maintenance tasks instead of its starting node.wombat.windfarm.system.cable.Cable.upstream_nodes
has been updated to be in the correct order the nodes sit on the stringwombat.windfarm.system.subassembly.Subassembly.interrupt_subassembly_processes
is nowinterrupt_processes
and only interrupts the cable's own maintenance and failure simulation processes.wombat.windfarm.system.system.System.interrupt_all_subassembly_processes
was added so that subassemblies are no longer directly interacting with each other, and the interruptions are caused by the system's themselves.wombat.windfarm.system.system.System.log_action
no returns theSubassembly.id
instead of the__repr__
for the object to create a legible log.
0.3.5 (2021-December-9)#
Downtime-based and requests-based unscheduled maintenance models have been added to servicing equipment.
Windfarm.current_availability
is able to account for multiple substations and is now an accurate calculation of the operating level across the windfarm.Simulation.from_inputs()
is replaced bySimulation.from_config()
to be more straightforward for users.ServiceCrew
has been added for expansion to multiple crews.Servicing equipment now have separate
travel
andcrew_transfer
,weather_delay
, andrepair
functions to more realistically simulate the separate processes involved.The windfarm now has a distance matrix to calculate the distance between any two systems onsite, for instance, substation to cable, cable to turbine, etc.
Bug fix in the task completion rate metric.
WombatEnvironment.log_action()
enforces the use of keyword arguments with only 3 required inputs.WombatEnvironment.weather_forecast()
outputs now include the datetime index.If no PySAM settings are provided, the
financial_model
will be set toNone
with aNotImplementedError
being raised for any attempted usage of the PySAM powered functionality.Fix bugs in
Maintenance
andFailure
initialization.Fix bugs in operating level accounting from recent updates.
Update the Unicode typing in all docstrings.
Update the documentation to account for all the recent changes, including adding a new demonstration notebook for the 3 new strategies.
0.3.1 (2021-March-2)#
Updated the
simulation/
folder to be a single-levelcore/
directory.Updates the order of the keyword arguments for
WombatEnvironment.log_action()
, and makes all arguments keyword-only arguments.