Decision Problems
Decision problems package a reusable narrative statement plus a structured decision frame: decision maker, scope, variables, objective, constraints, and assumptions extracted from a source.
See Decision Problem Catalog for the generated per-problem catalog pages.
The initial entry is decision_laptop_design_profit_maximization, distilled from Shiau, Tseng, Heutchy, and Michalek (2007) into a reusable decision-based design brief for laptop configuration and pricing.
In addition to the narrative brief, each entry exposes typed structure plus one shared candidate workflow:
iter_candidates()iter_evaluations()rank_evaluations()best_evaluation()
The active mode is visible through candidate_kind:
"discrete-option"for explicit conjoint option spaces"empirical-choice"for benchmark-backed categorical choices
Examples
Runnable scripts:
examples/decision/laptop_design.pyexamples/decision/mseval_material_choice.py
Laptop design
import design_research_problems as derp
problem = derp.get_problem("decision_laptop_design_profit_maximization")
top_three = problem.rank_evaluations()[:3]
best = problem.best_evaluation()
print(problem.metadata.problem_id)
print(problem.objective_specs[0].key)
print(problem.candidate_kind)
print(problem.candidate_count)
print(round(best.objective_value, 6), best.candidate_label)
MSEval empirical choice
import design_research_problems as derp
problem = derp.get_problem("decision_mseval_safety_helmet_lightweight")
top_three = problem.rank_evaluations()[:3]
best = problem.best_evaluation()
print(problem.metadata.problem_id)
print(problem.objective_specs[0].key)
print(problem.candidate_kind)
print(problem.candidate_count)
print(best.candidate_label, best.objective_value)
print([entry.candidate_label for entry in top_three])
The discrete evaluator scores the 3,125 explicit Table 5 conjoint profiles against the ten Table 6 competitor profiles using the Table 8 part-worth logit model. The five engineering constraints are exposed as typed formulas for inspection and downstream tooling, but they are not numerically enforced by the discrete evaluator in this version.