Skip to content

Commit 8c7f8b2

Browse files
author
Documenter.jl
committed
build based on e3bf6ff
1 parent e2fdb7b commit 8c7f8b2

21 files changed

Lines changed: 350 additions & 272 deletions

File tree

dev/.documenter-siteinfo.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"documenter":{"julia_version":"1.12.2","generation_timestamp":"2025-12-08T16:42:20","documenter_version":"1.16.1"}}
1+
{"documenter":{"julia_version":"1.12.4","generation_timestamp":"2026-01-12T08:10:47","documenter_version":"1.16.1"}}

dev/api/index.html

Lines changed: 259 additions & 184 deletions
Large diffs are not rendered by default.

dev/benchmark_interfaces/index.html

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

dev/benchmarks/argmax/index.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

dev/benchmarks/dvsp/index.html

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

dev/benchmarks/dynamic_assortment/index.html

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

dev/benchmarks/fixed_size_shortest_path/index.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<!DOCTYPE html>
2+
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Maintenance problem with resource constraint · DecisionFocusedLearningBenchmarks.jl</title><meta name="title" content="Maintenance problem with resource constraint · DecisionFocusedLearningBenchmarks.jl"/><meta property="og:title" content="Maintenance problem with resource constraint · DecisionFocusedLearningBenchmarks.jl"/><meta property="twitter:title" content="Maintenance problem with resource constraint · DecisionFocusedLearningBenchmarks.jl"/><meta name="description" content="Documentation for DecisionFocusedLearningBenchmarks.jl."/><meta property="og:description" content="Documentation for DecisionFocusedLearningBenchmarks.jl."/><meta property="twitter:description" content="Documentation for DecisionFocusedLearningBenchmarks.jl."/><script data-outdated-warner src="../../assets/warner.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.050/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL="../.."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../../assets/documenter.js"></script><script src="../../search_index.js"></script><script src="../../siteinfo.js"></script><script src="../../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/catppuccin-mocha.css" data-theme-name="catppuccin-mocha"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/catppuccin-macchiato.css" data-theme-name="catppuccin-macchiato"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/catppuccin-frappe.css" data-theme-name="catppuccin-frappe"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/catppuccin-latte.css" data-theme-name="catppuccin-latte"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><div class="docs-package-name"><span class="docs-autofit"><a href="../../">DecisionFocusedLearningBenchmarks.jl</a></span></div><button class="docs-search-query input is-rounded is-small is-clickable my-2 mx-auto py-1 px-2" id="documenter-search-query">Search docs (Ctrl + /)</button><ul class="docs-menu"><li><span class="tocitem">Home</span><ul><li><a class="tocitem" href="../../">Getting started</a></li><li><a class="tocitem" href="../../benchmark_interfaces/">Understanding Benchmark Interfaces</a></li></ul></li><li><span class="tocitem">Tutorials</span><ul><li><a class="tocitem" href="../../warcraft_tutorial/">Path-finding on image maps</a></li></ul></li><li><span class="tocitem">Benchmark problems list</span><ul><li><a class="tocitem" href="../argmax/">Argmax</a></li><li><a class="tocitem" href="../dvsp/">Dynamic Vehicle Scheduling</a></li><li><a class="tocitem" href="../dynamic_assortment/">Dynamic Assortment</a></li><li><a class="tocitem" href="../fixed_size_shortest_path/">Shortest paths</a></li><li class="is-active"><a class="tocitem" href>Maintenance problem with resource constraint</a><ul class="internal"><li><a class="tocitem" href="#Problem-Description"><span>Problem Description</span></a></li><li><a class="tocitem" href="#Key-Components"><span>Key Components</span></a></li><li><a class="tocitem" href="#Benchmark-Policies"><span>Benchmark Policies</span></a></li></ul></li><li><a class="tocitem" href="../portfolio_optimization/">Portfolio Optimization</a></li><li><a class="tocitem" href="../ranking/">Ranking</a></li><li><a class="tocitem" href="../subset_selection/">Subset Selection</a></li><li><a class="tocitem" href="../vsp/">Stochastic Vehicle Scheduling</a></li><li><a class="tocitem" href="../warcraft/">Warcraft</a></li></ul></li><li><a class="tocitem" href="../../api/">API reference</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><a class="docs-sidebar-button docs-navbar-link fa-solid fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a><nav class="breadcrumb"><ul class="is-hidden-mobile"><li><a class="is-disabled">Benchmark problems list</a></li><li class="is-active"><a href>Maintenance problem with resource constraint</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Maintenance problem with resource constraint</a></li></ul></nav><div class="docs-right"><a class="docs-navbar-link" href="https://github.com/JuliaDecisionFocusedLearning/DecisionFocusedLearningBenchmarks.jl" title="View the repository on GitHub"><span class="docs-icon fa-brands"></span><span class="docs-label is-hidden-touch">GitHub</span></a><a class="docs-navbar-link" href="https://github.com/JuliaDecisionFocusedLearning/DecisionFocusedLearningBenchmarks.jl/blob/main/docs/src/benchmarks/maintenance.md" title="Edit source on GitHub"><span class="docs-icon fa-solid"></span></a><a class="docs-settings-button docs-navbar-link fa-solid fa-gear" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-article-toggle-button fa-solid fa-chevron-up" id="documenter-article-toggle-button" href="javascript:;" title="Collapse all docstrings"></a></div></header><article class="content" id="documenter-page"><h1 id="Maintenance-problem-with-resource-constraint"><a class="docs-heading-anchor" href="#Maintenance-problem-with-resource-constraint">Maintenance problem with resource constraint</a><a id="Maintenance-problem-with-resource-constraint-1"></a><a class="docs-heading-anchor-permalink" href="#Maintenance-problem-with-resource-constraint" title="Permalink"></a></h1><p>The Maintenance problem with resource constraint is a sequential decision-making benchmark where an agent must repeatedly decide which components to maintain over time. The goal is to minimize total expected cost while accounting for independent degradation of components and limited maintenance capacity.</p><h2 id="Problem-Description"><a class="docs-heading-anchor" href="#Problem-Description">Problem Description</a><a id="Problem-Description-1"></a><a class="docs-heading-anchor-permalink" href="#Problem-Description" title="Permalink"></a></h2><h3 id="Overview"><a class="docs-heading-anchor" href="#Overview">Overview</a><a id="Overview-1"></a><a class="docs-heading-anchor-permalink" href="#Overview" title="Permalink"></a></h3><p>In this benchmark, a system consists of <span>$N$</span> identical components, each of which can degrade over <span>$n$</span> discrete states. State <span>$1$</span> means that the component is new, state <span>$n$</span> means that the component is failed. At each time step, the agent can maintain up to <span>$K$</span> components. </p><p>This forms an endogenous multistage stochastic optimization problem, where the agent must plan maintenance actions over the horizon.</p><h3 id="Mathematical-Formulation"><a class="docs-heading-anchor" href="#Mathematical-Formulation">Mathematical Formulation</a><a id="Mathematical-Formulation-1"></a><a class="docs-heading-anchor-permalink" href="#Mathematical-Formulation" title="Permalink"></a></h3><p>The maintenance problem can be formulated as a finite-horizon Markov Decision Process (MDP) with the following components:</p><p><strong>State Space</strong> <span>$\mathcal{S}$</span>: At time step <span>$t$</span>, the state <span>$s_t \in [1:n]^N$</span> is the degradation state for each component.</p><p><strong>Action Space</strong> <span>$\mathcal{A}$</span>: The action at time <span>$t$</span> is the set of components that are maintained at time <span>$t$</span>:</p><p class="math-container">\[a_t \subseteq \{1, 2, \ldots, N\} \text{ such that } |a_t| \leq K\]</p><h3 id="Transition-Dynamics"><a class="docs-heading-anchor" href="#Transition-Dynamics">Transition Dynamics</a><a id="Transition-Dynamics-1"></a><a class="docs-heading-anchor-permalink" href="#Transition-Dynamics" title="Permalink"></a></h3><p>The state transitions depend on whether a component is maintained or not:</p><p>For each component (i) at time (t):</p><ul><li><strong>Maintained component</strong> ((i \in a_t)):</li></ul><p>[ s_{t+1}^i = 1 \quad \text{(perfect maintenance)} ]</p><ul><li><strong>Unmaintained component</strong> ((i \notin a_t)):</li></ul><p>[ s<em>{t+1}^i = \begin{cases} \min(s</em>t^i + 1, n) &amp; \text{with probability } p,\
3+
s_t^i &amp; \text{with probability } 1-p. \end{cases} ]</p><p>Here, (p) is the degradation probability, (s_t^i) is the current state of component (i), and (n) is the maximum (failed) state.</p><hr/><h3 id="Cost-Function"><a class="docs-heading-anchor" href="#Cost-Function">Cost Function</a><a id="Cost-Function-1"></a><a class="docs-heading-anchor-permalink" href="#Cost-Function" title="Permalink"></a></h3><p>The immediate cost at time (t) is:</p><p>$</p><p>c(s<em>t, a</em>t) = \Big( c<em>m \cdot |a</em>t| + c<em>f \cdot #{ i : s</em>t^i = n } \Big) $</p><p>Where:</p><ul><li><p class="math-container">\[c_m\]</p>is the maintenance cost per component. </li><li><p class="math-container">\[|a_t|\]</p>is the number of components maintained. </li><li><p class="math-container">\[c_f\]</p>is the failure cost per failed component. </li><li><p class="math-container">\[\#\{ i : s_t^i = n \}\]</p>counts the number of components in the failed state.</li></ul><p>This formulation captures the total cost for maintaining components and penalizing failures.</p><p><strong>Objective</strong>: Find a policy <span>$\pi: \mathcal{S} \to \mathcal{A}$</span> that minimizes the expected cumulative cost:</p><p class="math-container">\[\min_\pi \mathbb{E}\left[\sum_{t=1}^T c(s_t, \pi(s_t)) \right]\]</p><p><strong>Terminal Condition</strong>: The episode terminates after <span>$T$</span> time steps, with no terminal reward.</p><h2 id="Key-Components"><a class="docs-heading-anchor" href="#Key-Components">Key Components</a><a id="Key-Components-1"></a><a class="docs-heading-anchor-permalink" href="#Key-Components" title="Permalink"></a></h2><h3 id="[MaintenanceBenchmark](@ref)"><a class="docs-heading-anchor" href="#[MaintenanceBenchmark](@ref)"><a href="../../api/#DecisionFocusedLearningBenchmarks.Maintenance.MaintenanceBenchmark"><code>MaintenanceBenchmark</code></a></a><a id="[MaintenanceBenchmark](@ref)-1"></a><a class="docs-heading-anchor-permalink" href="#[MaintenanceBenchmark](@ref)" title="Permalink"></a></h3><p>The main benchmark configuration with the following parameters:</p><ul><li><code>N</code>: number of components (default: 2)</li><li><code>K</code>: maximum number of components that can be maintained simultaneously (default: 1) </li><li><code>n</code>: number of degradation states per component (default: 3)</li><li><code>p</code>: degradation probability (default: 0.2)</li><li><code>c_f</code>: failure cost (default: 10.0)</li><li><code>c_m</code>: maintenance cost (default: 3.0)</li><li><code>max_steps</code>: Number of time steps per episode (default: 80)</li></ul><h3 id="Instance-Generation"><a class="docs-heading-anchor" href="#Instance-Generation">Instance Generation</a><a id="Instance-Generation-1"></a><a class="docs-heading-anchor-permalink" href="#Instance-Generation" title="Permalink"></a></h3><p>Each problem instance includes:</p><ul><li><strong>Starting State</strong>: Random starting degradation state in <span>$[1,n]$</span> for each components.</li></ul><h3 id="Environment-Dynamics"><a class="docs-heading-anchor" href="#Environment-Dynamics">Environment Dynamics</a><a id="Environment-Dynamics-1"></a><a class="docs-heading-anchor-permalink" href="#Environment-Dynamics" title="Permalink"></a></h3><p>The environment tracks:</p><ul><li>Current time step</li><li>Current degradation state.</li></ul><p><strong>State Observation</strong>: Agents observe a normalized feature vector containing the degradation state of each component.</p><h2 id="Benchmark-Policies"><a class="docs-heading-anchor" href="#Benchmark-Policies">Benchmark Policies</a><a id="Benchmark-Policies-1"></a><a class="docs-heading-anchor-permalink" href="#Benchmark-Policies" title="Permalink"></a></h2><h3 id="Greedy-Policy"><a class="docs-heading-anchor" href="#Greedy-Policy">Greedy Policy</a><a id="Greedy-Policy-1"></a><a class="docs-heading-anchor-permalink" href="#Greedy-Policy" title="Permalink"></a></h3><p>Greedy policy that maintains components in the last two degradation states, up to the maintenance capacity. This provides a simple baseline.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../fixed_size_shortest_path/">« Shortest paths</a><a class="docs-footer-nextpage" href="../portfolio_optimization/">Portfolio Optimization »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.16.1 on <span class="colophon-date" title="Monday 12 January 2026 08:10">Monday 12 January 2026</span>. Using Julia version 1.12.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>

0 commit comments

Comments
 (0)