# Meoh

> Multi-objective Evolution of Heuristics (MEoH) method skill. USE WHEN the user explicitly requests MEoH / Multi-objective EoH, or wants Pareto-based population evolution with archive for multi-objective problems.

- Skill: `optima-cityu/meoh` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add optima-cityu/meoh`
- Raw SKILL.md: https://api.skillmd.com/api/skills/optima-cityu/meoh/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: optima-cityu (https://skillmd.com/u/optima-cityu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/optima-cityu/meoh

---


# Multi-objective Evolution of Heuristics (MEoH) Skill

> **Paper**: Yao et al., "Multi-objective evolution of heuristic using large language model", AAAI 2025.

## 1. Method Essence

MEoH extends EOH's evolutionary operators (E1/E2/M1/M2) to **multi-objective** scenarios: individuals are evaluated with multiple objective vectors, Pareto non-dominated sorting determines selection pressure, and a **non-dominated archive** maintains the historical best front. The LLM sees multiple representative individuals from the front during generation, accommodating different objective preferences.

Key differences from single-objective EOH:
- Selection is based on **domination + crowding**, not a single score
- **Front diversity** must be maintained: both ends and the middle of the front must have representatives
- Archive individuals can be "resurrected" for crossover (even if not in the current population)

## 2. Recommended Parameters

See `params.yaml` in this directory for the recommended parameter configuration.

**Note**: The number of objectives is determined by the length of `objective_metrics`, not a separate `num_objs` parameter.

### What Happens During Evolution

1. Population initialized; evaluate all individuals
2. Each generation:
   - Identify non-dominated front (Pareto front)
   - Archive front members
   - Generate offspring via LLM operators, using front members as parents
   - Evaluate offspring
   - Merge offspring into population
   - Non-dominated sorting + crowding distance truncation
3. Archive grows as better front members are found
4. Final archive contains the best Pareto front discovered

### Common Pitfalls

- Front not diverse → increase `population_size` or force exploration at front ends
- Archive too large → increase crowding pressure; archive pruning is automatic
- Convergence slow → check if objectives are truly conflicting; some problems may be easier with single-objective
- Front biased toward one objective → manually set extreme weight vectors as seeds

## 4. Acceptance Criteria

- Non-dominated front identified and archived
- Front covers both objective extremes and balanced trade-offs
- Archive members used as parents for crossover (not just current population)
- Crowding distance prevents front collapse
- Final archive represents the full Pareto front

