Loading...
Searching...
No Matches
response_optimization.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
6#include "opennn/core/pch.h"
8
9namespace opennn
10{
11
12class Network;
13
15{
16public:
17
18 // Rebinding clears objectives, constraints and cached bounds.
19 void set(Network* = nullptr);
20
21 struct Objective
22 {
23 enum class Sense { Minimize, Maximize, Fixed };
24
26
28
29 float value = 0.0f;
30 };
31
45
46 explicit ResponseOptimization(Network* = nullptr);
47
49
50 void add_objective(const string&, Objective::Sense, float value = 0.0f);
51 void add_constraint(const string&, Constraint::Condition, const vector<float>& values = {});
52
53 void clear_objectives() { objectives.clear(); }
54 Index get_objectives_number() const { return static_cast<Index>(objectives.size()); }
55 bool is_objective(const string& name) const;
56
58 {
61
62 explicit Objectives(const ResponseOptimization& p);
63 MatrixR extract(const MatrixR& inputs, const MatrixR& outputs) const;
64 float utopian_and_sense(Index row, Index col) const;
66 };
67
68 pair<Index, VectorR> get_advised_point(const MatrixR& results) const;
69
71 void set_points_number(Index);
72
73 // Zero inherits the optimization iteration count.
75 // Zero disables the consecutive-failure limit.
77
79 // Eigen's per-round evaluation budget; excludes finite-difference probes.
82
84
85protected:
86
87 Network* network = nullptr;
88
89 vector<Objective> objectives;
90 vector<Constraint> constraints;
91
92 pair<VectorR, VectorR> input_bounds;
93
95
97
98 pair<VectorR, VectorR> calculate_domain();
99
100 pair<VectorR, VectorR> solve(VectorR) const;
101
102 string get_sampling_failure() const;
103
104 VectorR calculate_random_input(const pair<VectorR, VectorR>&) const;
105
106 void assign_random_categories(VectorR&, float probability = 1.0f) const;
107
109
110 vector<Index> calculate_pareto_front(const MatrixR&) const;
111
112 vector<Index> clean_front(const MatrixR&, const MatrixR&) const;
113
115 Index points_number = 1000;
118
120
121private:
122
123 struct FeasibilityRepairSystem;
124
125 pair<VectorR, VectorR> get_unconstrained_domain() const;
126
127 string get_input_column_name(Index) const;
128
129 float get_bound_tolerance(float) const;
130
131 pair<float, float> get_constraint_bounds(const Constraint&) const;
132
133 float numeric_tolerance = 1e-6f;
134
135 float constraint_tolerance = 1e-3f;
136
137 float feasibility_margin_factor = 0.1f;
138
139 mutable Index invalid_objective = -1;
140
141 // One round, not three. Rounding then re-solving is a feasibility pump, and at a matched
142 // total budget the alternation buys nothing: one solve of 150 evaluations matches or beats
143 // three of 50 on every case measured, and is the most precise on output-coupled equalities.
144 // Three rounds cost twice the time on cardinality for an identical answer.
145 Index feasibility_rounds = 1;
146
147 // A ceiling, not a budget. The solver stops on ftol/xtol once the step stops paying, so the
148 // average solve spends 8 to 16 evaluations and fewer than 0.5% ever reach 50. Raising this
149 // changes nothing; lowering it below about 20 starts discarding repairable candidates.
150 Index feasibility_evaluations = 50;
151
152 float diversity_factor = 0.2f;
153};
154
155}
Definition network.h:87
pair< Index, VectorR > get_advised_point(const MatrixR &results) const
pair< VectorR, VectorR > solve(VectorR) const
Index maximum_consecutive_failures
Definition response_optimization.h:117
void set_feasibility_margin_factor(float)
pair< VectorR, VectorR > input_bounds
Definition response_optimization.h:92
pair< VectorR, VectorR > calculate_domain()
virtual MatrixR multi_optimization()=0
Index iterations_number
Definition response_optimization.h:114
vector< Index > clean_front(const MatrixR &, const MatrixR &) const
void clear_objectives()
Definition response_optimization.h:53
virtual MatrixR single_optimization()=0
Index sampling_budget_multiplier
Definition response_optimization.h:116
Index get_objectives_number() const
Definition response_optimization.h:54
void assign_random_categories(VectorR &, float probability=1.0f) const
void set_sampling_budget_multiplier(Index)
string get_sampling_failure() const
void set_maximum_consecutive_failures(Index)
vector< Index > calculate_pareto_front(const MatrixR &) const
bool is_objective(const string &name) const
vector< Objective > objectives
Definition response_optimization.h:89
void set_feasibility_evaluations(Index)
VectorR calculate_random_input(const pair< VectorR, VectorR > &) const
void add_objective(const string &, Objective::Sense, float value=0.0f)
void set(Network *=nullptr)
vector< Constraint > constraints
Definition response_optimization.h:90
Network * network
Definition response_optimization.h:87
ResponseOptimization(Network *=nullptr)
Index points_number
Definition response_optimization.h:115
Index requested_front_size
Definition response_optimization.h:119
MatrixR evaluate_objectives(const MatrixR &, const MatrixR &) const
void add_constraint(const string &, Constraint::Condition, const vector< float > &values={})
Definition configuration.h:10
Eigen::Matrix< float, Eigen::Dynamic, 1 > VectorR
Definition opennn_types.h:335
Eigen::Matrix< float, Eigen::Dynamic, Eigen::Dynamic, Layout > MatrixR
Definition opennn_types.h:331
Definition expression_evaluator.h:41
Definition response_optimization.h:33
Condition condition
Definition response_optimization.h:41
CompiledExpression equation
Definition response_optimization.h:39
Condition
Definition response_optimization.h:35
@ Less
Definition response_optimization.h:36
@ Between
Definition response_optimization.h:36
@ Cardinality
Definition response_optimization.h:36
@ GreaterEqual
Definition response_optimization.h:36
@ Greater
Definition response_optimization.h:36
@ Integer
Definition response_optimization.h:36
@ AllowedSet
Definition response_optimization.h:36
@ LessEqual
Definition response_optimization.h:36
@ Equal
Definition response_optimization.h:36
vector< float > values
Definition response_optimization.h:43
Definition response_optimization.h:22
Sense
Definition response_optimization.h:23
@ Fixed
Definition response_optimization.h:23
@ Maximize
Definition response_optimization.h:23
@ Minimize
Definition response_optimization.h:23
Sense sense
Definition response_optimization.h:27
CompiledExpression expression
Definition response_optimization.h:25
float value
Definition response_optimization.h:29
Objectives(const ResponseOptimization &p)
void update_utopian_from_points(const MatrixR &values)
const ResponseOptimization & problem
Definition response_optimization.h:59
VectorR utopian
Definition response_optimization.h:60
MatrixR extract(const MatrixR &inputs, const MatrixR &outputs) const
float utopian_and_sense(Index row, Index col) const