Chapter 16: Robot System Design Process
Lesson 2: Concept Generation and Trade-off Studies
This lesson formalizes robot concept generation and trade-off studies using mathematical models of design spaces, multi-criteria objectives, and Pareto optimality. We connect informal brainstorming to structured decision-making, including scoring, normalization, and basic multi-objective optimization tools that can be implemented in Python, C++, Java, and MATLAB/Simulink.
1. Role of Concept Generation in Robot Design
After requirements engineering (Lesson 1), the next step is to generate candidate robot concepts that could satisfy those requirements. Mathematically, let \( \mathcal{X} \) denote the set of feasible concepts, each described by a vector of design variables \( \mathbf{x} \in \mathcal{X} \subset \mathbb{R}^n \) (continuous dimensions such as link lengths, motor ratings) plus discrete choices (wheel vs. leg, LiDAR vs. camera, etc.).
Requirements from Lesson 1 can be represented as constraints on \( \mathbf{x} \) and as target values on performance functions:
\[ \begin{aligned} \mathcal{X} &= \left\{ \mathbf{x} \in \mathbb{R}^n \,\middle|\, g_j(\mathbf{x}) \le 0,\; j=1,\dots,q \right\},\\ J_k(\mathbf{x}) &:\ \text{objective functions (e.g. cost, mass, tracking error)},\ k=1,\dots,m. \end{aligned} \]
Concept generation populates a finite subset \( \{\mathbf{x}^{(1)},\dots,\mathbf{x}^{(N)}\} \subset \mathcal{X} \) using creativity techniques (brainstorming, morphological charts) but the selection among those candidates is governed by multi-criteria optimization.
flowchart TD
R["Requirements (functional, performance, safety)"] --> G["Generate many candidate concepts"]
G --> F1["Filter by feasibility (constraints, physical limits)"]
F1 --> E["Evaluate metrics: cost, weight, accuracy, power, etc."]
E --> T["Analyze trade-offs (multi-criteria)"]
T --> S["Select promising concepts for detailed design"]
2. Mathematical Representation of Design Space
For early-stage robot design, it is useful to combine continuous and discrete choices into a unified notation. Let \( \mathbf{x} = [\mathbf{x}_c^\top,\mathbf{x}_d^\top]^\top \), where \( \mathbf{x}_c \in \mathbb{R}^{n_c} \) are continuous variables (e.g. link lengths, motor torque ratings) and \( \mathbf{x}_d \in \{0,1,\dots\}^{n_d} \) encode discrete choices (e.g. mobility type, sensor type).
We can enforce basic physical limits and compatibility constraints as inequalities:
\[ \begin{aligned} g_1(\mathbf{x}) &= m(\mathbf{x}) - m_{\max} \le 0 &&\text{(mass limit)},\\ g_2(\mathbf{x}) &= P(\mathbf{x}) - P_{\max} \le 0 &&\text{(power limit)},\\ g_3(\mathbf{x}) &= v_{\min} - v(\mathbf{x}) \le 0 &&\text{(min speed)},\\ g_4(\mathbf{x}) &= \sigma_{\text{joint}}(\mathbf{x}) - \sigma_{\text{allow}} \le 0 &&\text{(stress)}. \end{aligned} \]
Here \( m(\mathbf{x}) \) is the total mass, \( P(\mathbf{x}) \) the peak electrical power, \( v(\mathbf{x}) \) a reachable speed, and \( \sigma_{\text{joint}}(\mathbf{x}) \) a worst-case joint stress (estimated using basic statics and linear control results for torque bounds).
The goal of concept generation is therefore to find many feasible \( \mathbf{x}^{(i)} \) satisfying \( g_j(\mathbf{x}^{(i)}) \le 0 \) for all \( j \), while exploring qualitatively different structures (e.g. wheeled vs. legged).
3. Multi-Criteria Objectives and Normalization
Real robot design is intrinsically multi-criteria: we want low cost, low mass, low energy consumption, and high performance. Let \( J_k(\mathbf{x}) \) be objectives to be minimized:
\[ \mathbf{J}(\mathbf{x}) = \begin{bmatrix} J_1(\mathbf{x}) \\ \vdots \\ J_m(\mathbf{x}) \end{bmatrix} = \begin{bmatrix} \text{cost}(\mathbf{x}) \\ \text{mass}(\mathbf{x}) \\ \text{energy}(\mathbf{x}) \\ \text{tracking_error}(\mathbf{x}) \\ \vdots \end{bmatrix} \]
To combine heterogeneous quantities, we first normalize them. Suppose among the generated concepts we observe ranges \( J_k^{\min}, J_k^{\max} \). A simple linear normalization (where 1 is best, 0 is worst) is:
\[ z_k(\mathbf{x}) = \frac{J_k^{\max} - J_k(\mathbf{x})}{J_k^{\max} - J_k^{\min}}, \quad k = 1,\dots,m. \]
For criteria to maximize (e.g. payload capacity), you can invert the sign or swap numerator and denominator.
A common aggregation is a weighted sum:
\[ U(\mathbf{x};\mathbf{w}) = \sum_{k=1}^m w_k\, z_k(\mathbf{x}) = \mathbf{w}^\top \mathbf{z}(\mathbf{x}), \quad \mathbf{w} \in \mathbb{R}^m,\ w_k \ge 0,\ \sum_{k=1}^m w_k = 1. \]
Here \( U(\mathbf{x};\mathbf{w}) \) is a scalar utility; higher \( U \) indicates a better concept given a specific weighting of trade-offs. Changing \( \mathbf{w} \) corresponds to changing the design priorities.
4. Pareto Optimality and Trade-off Fronts
Weighted sums hide the structure of trade-offs. A more fundamental concept is Pareto optimality.
Definition (Dominance).
For two concepts \( \mathbf{x},\mathbf{y} \in \mathcal{X} \), we say that \( \mathbf{x} \) dominates \( \mathbf{y} \), written \( \mathbf{x} \prec \mathbf{y} \), if
\[ J_k(\mathbf{x}) \le J_k(\mathbf{y})\ \forall k \quad\text{and}\quad \exists \ell:\ J_\ell(\mathbf{x}) < J_\ell(\mathbf{y}). \]
Definition (Pareto optimality).
A concept \( \mathbf{x}^\star \in \mathcal{X} \) is Pareto optimal if there is no other \( \mathbf{x} \in \mathcal{X} \) such that \( \mathbf{x} \prec \mathbf{x}^\star \).
The set of all Pareto-optimal concepts is the Pareto front:
\[ \mathcal{P} = \left\{ \mathbf{x}^\star \in \mathcal{X} \,\middle|\, \nexists\,\mathbf{x} \in \mathcal{X}: \mathbf{J}(\mathbf{x}) \le \mathbf{J}(\mathbf{x}^\star), \ \mathbf{J}(\mathbf{x}) \ne \mathbf{J}(\mathbf{x}^\star) \right\}. \]
Each point on \( \mathcal{P} \) corresponds to a different trade-off between objectives. A concept off the Pareto front is unambiguously worse than some other concept.
Theorem (Weighted sums and Pareto optimality, convex case).
Assume \( \mathcal{X} \subset \mathbb{R}^n \) is convex, each \( J_k(\mathbf{x}) \) is convex, and \( \mathbf{w} \gt \mathbf{0} \). Then any solution of
\[ \min_{\mathbf{x} \in \mathcal{X}} \sum_{k=1}^m w_k J_k(\mathbf{x}) \]
is Pareto optimal. (But not all Pareto points are necessarily recovered for non-convex problems.)
Sketch of proof.
Suppose \( \mathbf{x}^\star \) solves the weighted sum but is not Pareto optimal. Then there exists \( \tilde{\mathbf{x}} \in \mathcal{X} \) such that \( J_k(\tilde{\mathbf{x}}) \le J_k(\mathbf{x}^\star) \) for all \( k \) and strictly smaller for at least one index. With strictly positive weights, \( \sum_k w_k J_k(\tilde{\mathbf{x}}) \lt \sum_k w_k J_k(\mathbf{x}^\star) \), contradicting optimality of \( \mathbf{x}^\star \). Convexity ensures that a global minimizer of the weighted sum exists and can be found using convex optimization techniques.
5. Linear Trade-offs and Sensitivity
Using the scalar utility \( U(\mathbf{x};\mathbf{w}) \), the best concept under a given weighting is
\[ \mathbf{x}^\star(\mathbf{w}) \in \arg\max_{\mathbf{x} \in \mathcal{X}_{\text{cand}}} U(\mathbf{x};\mathbf{w}), \]
where \( \mathcal{X}_{\text{cand}} \) is the finite set of generated concepts. Since this is finite, the maximizer is always attained by at least one concept.
For two concepts \( \mathbf{x}^{(a)} \) and \( \mathbf{x}^{(b)} \), we can study sensitivity of the preference with respect to the weight vector \( \mathbf{w} \):
\[ U(\mathbf{x}^{(a)};\mathbf{w}) \ge U(\mathbf{x}^{(b)};\mathbf{w}) \iff \mathbf{w}^\top \left( \mathbf{z}(\mathbf{x}^{(a)}) - \mathbf{z}(\mathbf{x}^{(b)}) \right) \ge 0. \]
The inequality describes a half-space in weight space \( \mathbb{R}^m \). Thus, the region of weights for which a concept is preferred can be characterized geometrically and visualized in low dimensions (\( m=2,3 \)) to aid trade-off discussion with stakeholders.
6. Algorithmic Evaluation Pipeline
A simple algorithm for trade-off studies over a finite set of concepts:
- Generate a list of candidate concepts.
- Compute constraint functions \( g_j(\mathbf{x}^{(i)}) \).
- Discard infeasible concepts.
- Compute objective values \( J_k(\mathbf{x}^{(i)}) \).
- Normalize to obtain \( \mathbf{z}(\mathbf{x}^{(i)}) \).
- Compute scalar utilities \( U(\mathbf{x}^{(i)};\mathbf{w}) \).
- Compute Pareto front by dominance filtering.
flowchart TD
A["Candidate concepts x(1)...x(N)"] --> B["Check constraints g_j(x)<=0"]
B -->|feasible| C["Compute objectives J_k(x)"]
B -->|infeasible| D["Discard concept"]
C --> E["Normalize metrics z_k(x)"]
E --> F["Compute utility U(x; w)"]
C --> G["Dominance check between concepts"]
G --> H["Identify Pareto set P"]
F --> I["Rank concepts by U"]
H --> J["Visualize trade-offs and choose finalists"]
7. Python Example — Scoring Robot Concepts
Below is a Python prototype that: (i) stores candidate robot concepts, (ii) checks feasibility, (iii) computes normalized metrics, and (iv) finds both the best concept for a given weight vector and the Pareto front (discrete dominance).
import numpy as np
# Each concept: cost [k€], mass [kg], energy [Wh per mission], tracking_error [deg rms]
concepts = [
{"name": "A_wheeled", "cost": 15.0, "mass": 40.0, "energy": 800.0, "tracking_error": 1.5},
{"name": "B_tracked", "cost": 18.0, "mass": 50.0, "energy": 700.0, "tracking_error": 1.2},
{"name": "C_legged", "cost": 25.0, "mass": 55.0, "energy": 950.0, "tracking_error": 0.8},
]
# Constraints
MAX_MASS = 55.0 # kg
MAX_ENERGY = 1000 # Wh
def is_feasible(c):
return (c["mass"] <= MAX_MASS) and (c["energy"] <= MAX_ENERGY)
feasible = [c for c in concepts if is_feasible(c)]
# Build arrays of objectives to minimize
costs = np.array([c["cost"] for c in feasible])
masses = np.array([c["mass"] for c in feasible])
energies = np.array([c["energy"] for c in feasible])
errors = np.array([c["tracking_error"] for c in feasible])
def normalize_min_to_max(arr):
# returns z where 1 is best (minimum) and 0 is worst (maximum)
amin, amax = arr.min(), arr.max()
if np.isclose(amax, amin):
return np.ones_like(arr)
return (amax - arr) / (amax - amin)
Z = np.vstack([
normalize_min_to_max(costs),
normalize_min_to_max(masses),
normalize_min_to_max(energies),
normalize_min_to_max(errors),
]).T # shape: (N_feasible, m)
names = [c["name"] for c in feasible]
# Choose weights (cost, mass, energy, tracking_error)
w = np.array([0.3, 0.2, 0.2, 0.3])
utilities = Z @ w
best_idx = int(np.argmax(utilities))
print("Utilities:")
for i, name in enumerate(names):
print(f"{name}: U = {utilities[i]:.3f}")
print("\nBest concept under current weights:", names[best_idx])
# Pareto front (discrete dominance for 4 objectives to minimize)
F = np.vstack([costs, masses, energies, errors]).T
def dominates(i, j):
"""Return True if concept i dominates concept j (for minimization)."""
return np.all(F[i] <= F[j]) and np.any(F[i] < F[j])
pareto_indices = []
for i in range(len(F)):
dominated = False
for j in range(len(F)):
if i != j and dominates(j, i):
dominated = True
break
if not dominated:
pareto_indices.append(i)
print("\nPareto-optimal concepts:")
for idx in pareto_indices:
print(names[idx], "with objectives", F[idx])
This simple discrete analysis is already sufficient for many early-stage robot trade-off studies, especially when concepts are qualitatively distinct (e.g., wheels vs. legs).
8. C++ Example — Utility-Based Ranking
In C++, we can implement the same weighted-sum scoring for concept ranking (omitting dominance filtering for brevity).
#include <iostream>
#include <vector>
#include <string>
#include <limits>
struct Concept {
std::string name;
double cost;
double mass;
double energy;
double tracking_error;
};
struct NormalizedConcept {
std::string name;
double z_cost;
double z_mass;
double z_energy;
double z_error;
};
int main() {
std::vector<Concept> concepts = {
{"A_wheeled", 15.0, 40.0, 800.0, 1.5},
{"B_tracked", 18.0, 50.0, 700.0, 1.2},
{"C_legged", 25.0, 55.0, 950.0, 0.8}
};
const double MAX_MASS = 55.0;
const double MAX_ENERGY = 1000.0;
std::vector<Concept> feasible;
for (auto &c : concepts) {
if (c.mass <= MAX_MASS && c.energy <= MAX_ENERGY) {
feasible.push_back(c);
}
}
// Find min and max for each metric
auto init_min = std::numeric_limits<double>::max();
auto init_max = std::numeric_limits<double>::lowest();
double cost_min = init_min, cost_max = init_max;
double mass_min = init_min, mass_max = init_max;
double energy_min = init_min, energy_max = init_max;
double error_min = init_min, error_max = init_max;
for (auto &c : feasible) {
cost_min = std::min(cost_min, c.cost);
cost_max = std::max(cost_max, c.cost);
mass_min = std::min(mass_min, c.mass);
mass_max = std::max(mass_max, c.mass);
energy_min = std::min(energy_min, c.energy);
energy_max = std::max(energy_max, c.energy);
error_min = std::min(error_min, c.tracking_error);
error_max = std::max(error_max, c.tracking_error);
}
auto norm = [](double x, double xmin, double xmax) {
if (std::abs(xmax - xmin) < 1e-9) return 1.0;
return (xmax - x) / (xmax - xmin);
};
std::vector<NormalizedConcept> Z;
for (auto &c : feasible) {
NormalizedConcept z{
c.name,
norm(c.cost, cost_min, cost_max),
norm(c.mass, mass_min, mass_max),
norm(c.energy, energy_min, energy_max),
norm(c.tracking_error, error_min, error_max)
};
Z.push_back(z);
}
// weights: cost, mass, energy, tracking_error
double w_cost = 0.3, w_mass = 0.2, w_energy = 0.2, w_error = 0.3;
double best_U = -1e9;
std::string best_name;
for (auto &z : Z) {
double U = w_cost * z.z_cost
+ w_mass * z.z_mass
+ w_energy * z.z_energy
+ w_error * z.z_error;
std::cout << z.name << " : U = " << U << std::endl;
if (U > best_U) {
best_U = U;
best_name = z.name;
}
}
std::cout << "Best concept: " << best_name
<< " with utility " << best_U << std::endl;
return 0;
}
This C++ code can be integrated into a larger design tool that iterates over many robot configurations produced by CAD or parametric models.
9. Java Example — Object-Oriented Concept Scoring
A Java implementation emphasizes encapsulation of concept data and scoring logic.
import java.util.ArrayList;
import java.util.List;
class RobotConcept {
String name;
double cost;
double mass;
double energy;
double trackingError;
RobotConcept(String name, double cost, double mass, double energy, double trackingError) {
this.name = name;
this.cost = cost;
this.mass = mass;
this.energy = energy;
this.trackingError = trackingError;
}
}
public class ConceptTradeoff {
private static double norm(double x, double xmin, double xmax) {
if (Math.abs(xmax - xmin) < 1e-9) return 1.0;
return (xmax - x) / (xmax - xmin);
}
public static void main(String[] args) {
List<RobotConcept> concepts = new ArrayList<>();
concepts.add(new RobotConcept("A_wheeled", 15.0, 40.0, 800.0, 1.5));
concepts.add(new RobotConcept("B_tracked", 18.0, 50.0, 700.0, 1.2));
concepts.add(new RobotConcept("C_legged", 25.0, 55.0, 950.0, 0.8));
final double MAX_MASS = 55.0;
final double MAX_ENERGY = 1000.0;
List<RobotConcept> feasible = new ArrayList<>();
for (RobotConcept c : concepts) {
if (c.mass <= MAX_MASS && c.energy <= MAX_ENERGY) {
feasible.add(c);
}
}
double costMin = Double.POSITIVE_INFINITY, costMax = Double.NEGATIVE_INFINITY;
double massMin = Double.POSITIVE_INFINITY, massMax = Double.NEGATIVE_INFINITY;
double energyMin = Double.POSITIVE_INFINITY, energyMax = Double.NEGATIVE_INFINITY;
double errorMin = Double.POSITIVE_INFINITY, errorMax = Double.NEGATIVE_INFINITY;
for (RobotConcept c : feasible) {
costMin = Math.min(costMin, c.cost);
costMax = Math.max(costMax, c.cost);
massMin = Math.min(massMin, c.mass);
massMax = Math.max(massMax, c.mass);
energyMin = Math.min(energyMin, c.energy);
energyMax = Math.max(energyMax, c.energy);
errorMin = Math.min(errorMin, c.trackingError);
errorMax = Math.max(errorMax, c.trackingError);
}
double wCost = 0.3, wMass = 0.2, wEnergy = 0.2, wError = 0.3;
double bestU = -1e9;
String bestName = "";
for (RobotConcept c : feasible) {
double zCost = norm(c.cost, costMin, costMax);
double zMass = norm(c.mass, massMin, massMax);
double zEnergy = norm(c.energy, energyMin, energyMax);
double zError = norm(c.trackingError, errorMin, errorMax);
double U = wCost * zCost + wMass * zMass + wEnergy * zEnergy + wError * zError;
System.out.printf("%s : U = %.3f%n", c.name, U);
if (U > bestU) {
bestU = U;
bestName = c.name;
}
}
System.out.println("Best concept: " + bestName + " with U = " + bestU);
}
}
Such a Java component can be embedded into larger enterprise tools used by design engineers and project managers.
10. MATLAB / Simulink Example — Matrix Formulation
In MATLAB, we can write the same computations in matrix form. Simulink can then realize the computation using Gain and Sum blocks to implement the weighted sum \( U = \mathbf{w}^\top \mathbf{z} \).
% Candidate concepts: rows = concepts, columns = [cost, mass, energy, tracking_error]
F = [ 15.0 40.0 800.0 1.5;
18.0 50.0 700.0 1.2;
25.0 55.0 950.0 0.8 ];
names = { 'A\_wheeled'; 'B\_tracked'; 'C\_legged' };
MAX_MASS = 55.0;
MAX_ENERGY = 1000.0;
% Feasibility mask
isFeasible = (F(:,2) <= MAX_MASS) & (F(:,3) <= MAX_ENERGY);
F = F(isFeasible, :);
names = names(isFeasible);
% Normalize each column for minimization (1 = best, 0 = worst)
Fmin = min(F, [], 1);
Fmax = max(F, [], 1);
Z = (Fmax - F) ./ (Fmax - Fmin); % implicit row-wise broadcast
% weights: cost, mass, energy, tracking_error
w = [0.3; 0.2; 0.2; 0.3];
U = Z * w; % utility values for each concept
[Ubest, idxBest] = max(U);
fprintf('Best concept: %s, U = %.3f\n', names{idxBest}, Ubest);
% --- Simulink mapping idea ---
% In Simulink:
% 1) Represent Z as a vector signal (e.g., from a Constant block).
% 2) Use a Gain block with parameter w' (1-by-4) to compute U = w' * Z.
% 3) Optionally sweep w in time to visualize sensitivity of concept ranking.
Because students already know linear control, the mapping \( U = \mathbf{w}^\top \mathbf{z} \) is analogous to a static linear output map \( y = Cx \) in state-space form, with \( \mathbf{z} \) as a pseudo-state capturing normalized performance.
11. Problems and Solutions
Problem 1 (Dominance and Pareto Set): Suppose we have three robot concepts with objective vectors (to minimize) \( J_1 = \) cost and \( J_2 = \) mass:
- \( A: (J_1,J_2) = (10, 8) \)
- \( B: (J_1,J_2) = (12, 7) \)
- \( C: (J_1,J_2) = (11, 11) \)
(a) Which concepts are Pareto optimal? (b) Which concept(s) are dominated?
Solution:
Concept \( C \) has \( J_1(C) = 11 \) and \( J_2(C) = 11 \). Concept \( A \) has \( J_1(A) = 10 < 11 \) and \( J_2(A) = 8 < 11 \), hence \( A \prec C \). So \( C \) is dominated and not Pareto optimal.
Comparing \( A \) and \( B \), we have \( J_1(A) = 10 < 12 = J_1(B) \) but \( J_2(A) = 8 > 7 = J_2(B) \). Neither dominates the other. Thus the Pareto set is \( \{A,B\} \), and \( C \) is dominated.
Problem 2 (Effect of Weight Changes): Consider two concepts with normalized scores \( \mathbf{z}(\mathbf{x}^{(1)}) = [0.9, 0.4]^\top \) and \( \mathbf{z}(\mathbf{x}^{(2)}) = [0.6, 0.8]^\top \) corresponding to objectives "cost" and "tracking accuracy". For a weight vector \( \mathbf{w} = [w_1, w_2]^\top \) with \( w_1 + w_2 = 1 \), find the range of \( w_1 \) for which concept 1 is preferred.
Solution:
We require \( U(\mathbf{x}^{(1)};\mathbf{w}) \ge U(\mathbf{x}^{(2)};\mathbf{w}) \), i.e.
\[ w_1 \cdot 0.9 + w_2 \cdot 0.4 \ge w_1 \cdot 0.6 + w_2 \cdot 0.8. \]
Using \( w_2 = 1 - w_1 \):
\[ 0.9 w_1 + 0.4(1 - w_1) \ge 0.6 w_1 + 0.8(1 - w_1). \]
Simplify both sides:
\[ 0.9 w_1 + 0.4 - 0.4 w_1 = 0.5 w_1 + 0.4, \]
\[ 0.6 w_1 + 0.8 - 0.8 w_1 = -0.2 w_1 + 0.8. \]
Inequality:
\[ 0.5 w_1 + 0.4 \ge -0.2 w_1 + 0.8 \iff 0.7 w_1 \ge 0.4 \iff w_1 \ge \frac{4}{7} \approx 0.571. \]
Thus concept 1 is preferred when \( w_1 \ge 4/7 \), i.e. when "cost" is given sufficiently high importance.
Problem 3 (Feasibility Region Visualization): A ground robot concept is characterized by mass \( m \) and peak power \( P \). The constraints are \( m \le 60 \) kg, \( P \le 1000 \) W, and \( m + 0.02 P \le 80 \) (a power–mass coupling due to battery size). (a) Sketch the feasible region in the \( (m,P) \)-plane. (b) Explain how concept generation should respect this region.
Solution sketch:
The constraints define three half-planes; the feasible region is the intersection of:
- \( m \le 60 \) (vertical line at \( m=60 \));
- \( P \le 1000 \) (horizontal line at \( P=1000 \));
- \( m + 0.02P \le 80 \) (line with intercepts at \( m=80 \) and \( P=4000 \)).
The feasible polygon can be visualized as in the following decision aid:
flowchart TD
S["Start with candidate (m, P)"] --> C1["Check m <= 60"]
C1 -->|no| R1["Reject concept"]
C1 -->|yes| C2["Check P <= 1000"]
C2 -->|no| R1
C2 -->|yes| C3["Check m + 0.02 P <= 80"]
C3 -->|no| R1
C3 -->|yes| A["Accept as feasible"]
In concept generation, designers should avoid spending effort on concepts that fall outside this polygon, since they cannot meet battery and mass-related constraints.
Problem 4 (Connection to Linear Control Cost Functions): In linear quadratic control, we often minimize a cost \( J = \int_0^T (x^\top Q x + u^\top R u)\,dt \). Explain how this is conceptually related to defining multi-criteria objectives \( J_1(\mathbf{x}), J_2(\mathbf{x}) \) for robot design.
Solution:
The LQR cost combines state deviation and control effort using weighting matrices \( Q \) and \( R \), which encode trade-offs between performance and energy. In concept generation, \( J_1(\mathbf{x}) \) might measure tracking error (akin to \( x^\top Q x \)), and \( J_2(\mathbf{x}) \) might measure energy or actuator effort (akin to \( u^\top R u \)). A scalarization \( U = w_1 z_1 + w_2 z_2 \) plays the same role as \( Q,R \) in defining how much we care about each term.
Problem 5 (Proving Dominance Implies Utility Superiority for Positive Weights): Let \( \mathbf{x},\mathbf{y} \) be two concepts with normalized vectors \( \mathbf{z}(\mathbf{x}), \mathbf{z}(\mathbf{y}) \). Suppose \( \mathbf{z}(\mathbf{x}) \ge \mathbf{z}(\mathbf{y}) \) (componentwise) and \( \mathbf{z}(\mathbf{x}) \ne \mathbf{z}(\mathbf{y}) \). Prove that for any weight vector \( \mathbf{w} \gt \mathbf{0} \) with \( \sum_k w_k = 1 \), we have \( U(\mathbf{x};\mathbf{w}) > U(\mathbf{y};\mathbf{w}) \).
Solution:
By assumption, \( z_k(\mathbf{x}) \ge z_k(\mathbf{y}) \) for all \( k \) and there exists some \( \ell \) such that \( z_\ell(\mathbf{x}) > z_\ell(\mathbf{y}) \). Then
\[ U(\mathbf{x};\mathbf{w}) - U(\mathbf{y};\mathbf{w}) = \sum_{k=1}^m w_k \big( z_k(\mathbf{x}) - z_k(\mathbf{y}) \big). \]
Each term satisfies \( z_k(\mathbf{x}) - z_k(\mathbf{y}) \ge 0 \), and for \( k = \ell \) the difference is strictly positive. With \( w_k \gt 0 \), every non-negative term is weighted by a strictly positive coefficient, so the sum is strictly positive: \( U(\mathbf{x};\mathbf{w}) - U(\mathbf{y};\mathbf{w}) > 0 \). Hence \( U(\mathbf{x};\mathbf{w}) > U(\mathbf{y};\mathbf{w}) \).
12. Summary
In this lesson we formalized concept generation and trade-off studies as a multi-criteria optimization problem over a finite set of candidate robot designs. We defined design variables, constraints, multi-objective cost functions, normalization procedures, and scalar utilities. Pareto optimality provides a principled way to identify non-dominated concepts, while weighted sums allow designers to encode preferences and rank concepts algorithmically. Practical implementations in Python, C++, Java, and MATLAB/Simulink demonstrate how these ideas integrate into engineering workflows. These tools will be used throughout later design stages, including co-design and prototyping cycles.
13. References
- Zadeh, L. A. (1963). Optimality and non-scalar-valued performance criteria. IEEE Transactions on Automatic Control, 8(1), 59–60.
- Haimes, Y. Y., Lasdon, L. S., & Wismer, D. A. (1971). On a bicriterion formulation of the problems of integrated system identification and system optimization. IEEE Transactions on Systems, Man, and Cybernetics, 1(3), 296–297.
- Steuer, R. E. (1977). Multiple criteria optimization: Theory, computation, and application. Naval Research Logistics Quarterly, 24(1), 1–22.
- Osyczka, A. (1985). Multicriteria optimization for engineering design. Design Optimization, 1(2), 193–227.
- Deb, K., Pratap, A., Agarwal, S., & Meyarivan, T. (2002). A fast and elitist multiobjective genetic algorithm: NSGA-II. IEEE Transactions on Evolutionary Computation, 6(2), 182–197.
- Papalambros, P. Y., & Wilde, D. J. (1988). A global criterion method for multiobjective optimization of engineering systems. Journal of Optimization Theory and Applications, 55(3), 479–499.
- Marler, R. T., & Arora, J. S. (2004). Survey of multi-objective optimization methods for engineering. Structural and Multidisciplinary Optimization, 26(6), 369–395.
- Janson, L., & Papalambros, P. Y. (2014). A scalable method for multiobjective optimization in engineering design. Journal of Mechanical Design, 136(8), 081401.
Help keep these engineering tutorials free and growing
If these lessons, examples, and project pages help you, a small donation supports the continued creation and improvement of free control, robotics, software, and engineering education resources.
Created and maintained by Abolfazl Mohammadijoo.