Back to all questions

How do material domain parameters work?

Material Domains
parameters
bounds
types

Domain parameters define the search space for your optimization campaign. Understanding parameter types, bounds, and constraints is essential for setting up an effective campaign.

Parameter Types

MatCraft supports three parameter types:

Continuous

Real-valued parameters with lower and upper bounds. This is the most common type.

yaml
- name: temperature
  type: continuous
  bounds: [200, 800]
  unit: "°C"

The optimizer searches the continuous range between the bounds. CMA-ES handles continuous parameters natively.

Discrete

Integer-valued parameters or parameters that can only take specific numeric steps:

yaml
- name: num_layers
  type: discrete
  bounds: [1, 10]
  step: 1  # Optional, defaults to 1

- name: concentration
  type: discrete
  bounds: [0.1, 1.0]
  step: 0.1  # Only values 0.1, 0.2, ..., 1.0

Discrete parameters are handled by rounding the continuous CMA-ES output to the nearest valid step.

Categorical

Parameters that take one of a fixed set of non-numeric values:

yaml
- name: solvent
  type: categorical
  choices: ["DMF", "DMSO", "NMP", "DMAc"]

Categorical parameters are encoded using one-hot encoding internally. For k categories, this adds k-1 dimensions to the search space (one category is treated as the reference).

Bounds

Bounds define the range of valid values. For best results:

  • Set bounds based on physically feasible ranges, not just the range of your existing data.
  • Wider bounds give the optimizer more room to explore but may slow convergence.
  • If you know the optimum is in a specific region, tighten the bounds accordingly.
yaml
# Too tight -- may miss the optimum
bounds: [0.48, 0.52]

# Too wide -- wastes evaluations on infeasible regions
bounds: [0.0, 1.0]

# Good -- covers the feasible range based on domain knowledge
bounds: [0.3, 0.7]

Units

Units are metadata — they do not affect the optimization. They are displayed in results and visualizations for clarity:

yaml
- name: pressure
  bounds: [1, 100]
  unit: "bar"

Default Values

You can specify a default or initial value that the optimizer uses as a starting point:

yaml
- name: temperature
  bounds: [200, 800]
  default: 450  # CMA-ES will center initial distribution here

Parameter Scaling

MatCraft automatically normalizes all parameters to [0, 1] internally for the optimizer. This ensures that parameters with different magnitudes (e.g., temperature in hundreds of degrees vs. concentration in fractional percentages) are treated equally. You do not need to manually scale your parameters.

Related Questions