home / skills / benchflow-ai / skillsbench / map-optimization-strategy

This skill optimizes spatial placement problems by pruning search space, scoring high-value tiles, and anchor-based greedy search to maximize objectives while

npx playbooks add skill benchflow-ai/skillsbench --skill map-optimization-strategy

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.3 KB
---
name: map-optimization-strategy
description: Strategy for solving constraint optimization problems on spatial maps. Use when you need to place items on a grid/map to maximize some objective while satisfying constraints.
---

# Map-Based Constraint Optimization Strategy

A systematic approach to solving placement optimization problems on spatial maps. This applies to any problem where you must place items on a grid to maximize an objective while respecting placement constraints.

## Why Exhaustive Search Fails

Exhaustive search (brute-force enumeration of all possible placements) is the **worst approach**:

- Combinatorial explosion: Placing N items on M valid tiles = O(M^N) combinations
- Even small maps become intractable (e.g., 50 tiles, 5 items = 312 million combinations)
- Most combinations are clearly suboptimal or invalid

## The Three-Phase Strategy

### Phase 1: Prune the Search Space

**Goal:** Eliminate tiles that cannot contribute to a good solution.

Remove tiles that are:
1. **Invalid for any placement** - Violate hard constraints (wrong terrain, out of range, blocked)
2. **Dominated** - Another tile is strictly better in all respects
3. **Isolated** - Too far from other valid tiles to form useful clusters

```
Before: 100 tiles in consideration
After pruning: 20-30 candidate tiles
```

This alone can reduce search space by 70-90%.

### Phase 2: Identify High-Value Spots

**Goal:** Find tiles that offer exceptional value for your objective.

Score each remaining tile by:
1. **Intrinsic value** - What does this tile contribute on its own?
2. **Adjacency potential** - What bonuses from neighboring tiles?
3. **Cluster potential** - Can this tile anchor a high-value group?

Rank tiles and identify the top candidates. These are your **priority tiles** - any good solution likely includes several of them.

```
Example scoring:
- Tile A: +4 base, +3 adjacency potential = 7 points (HIGH)
- Tile B: +1 base, +1 adjacency potential = 2 points (LOW)
```

### Phase 3: Anchor Point Search

**Goal:** Find placements that capture as many high-value spots as possible.

1. **Select anchor candidates** - Tiles that enable access to multiple high-value spots
2. **Expand from anchors** - Greedily add placements that maximize marginal value
3. **Validate constraints** - Ensure all placements satisfy requirements
4. **Local search** - Try swapping/moving placements to improve the solution

For problems with a "center" constraint (e.g., all placements within range of a central point):
- The anchor IS the center - try different center positions
- For each center, the reachable high-value tiles are fixed
- Optimize placement within each center's reach

## Algorithm Skeleton

```python
def optimize_placements(map_tiles, constraints, num_placements):
    # Phase 1: Prune
    candidates = [t for t in map_tiles if is_valid_tile(t, constraints)]

    # Phase 2: Score and rank
    scored = [(tile, score_tile(tile, candidates)) for tile in candidates]
    scored.sort(key=lambda x: -x[1])  # Descending by score
    high_value = scored[:top_k]

    # Phase 3: Anchor search
    best_solution = None
    best_score = 0

    for anchor in get_anchor_candidates(high_value, constraints):
        solution = greedy_expand(anchor, candidates, num_placements, constraints)
        solution = local_search(solution, candidates, constraints)

        if solution.score > best_score:
            best_solution = solution
            best_score = solution.score

    return best_solution
```

## Key Insights

1. **Prune early, prune aggressively** - Every tile removed saves exponential work later

2. **High-value tiles cluster** - Good placements tend to be near other good placements (adjacency bonuses compound)

3. **Anchors constrain the search** - Once you fix an anchor, many other decisions follow logically

4. **Greedy + local search is often sufficient** - You don't need the global optimum; a good local optimum found quickly beats a perfect solution found slowly

5. **Constraint propagation** - When you place one item, update what's valid for remaining items immediately

## Common Pitfalls

- **Ignoring interactions** - Placing item A may change the value of placing item B (adjacency effects, mutual exclusion)
- **Over-optimizing one metric** - Balance intrinsic value with flexibility for remaining placements
- **Forgetting to validate** - Always verify final solution satisfies ALL constraints

Overview

This skill describes a practical strategy for solving constraint optimization problems on spatial maps where items must be placed on a grid to maximize an objective while respecting placement rules. It presents a three-phase workflow—prune, score, anchor—that reduces combinatorial complexity and finds high-quality placements quickly. Use this when exhaustive search is infeasible and fast, good solutions are needed.

How this skill works

The method first prunes tiles that are invalid, dominated, or isolated to shrink the candidate set. Next it scores remaining tiles by intrinsic value, adjacency potential, and cluster potential to identify priority tiles. Finally it performs an anchor-based search: pick promising anchors, greedily expand placements around them, validate constraints, and apply local search improvements.

When to use it

  • Placing a fixed number of items on a map with adjacency or range bonuses
  • Problems with hard terrain or exclusion constraints that rule out many tiles
  • When exhaustive enumeration is too slow due to combinatorial explosion
  • Scenarios where near-optimal solutions quickly are preferred to exact optima
  • Situations with a central or range-limited placement constraint (centered search)

Best practices

  • Prune early and aggressively to reduce the exponential search burden
  • Score tiles using both intrinsic value and interaction effects (adjacency/cluster)
  • Treat anchors as decision points that constrain and simplify downstream choices
  • Propagate constraints immediately after each placement to keep candidates valid
  • Combine greedy expansion with local swaps for fast, robust improvements

Example use cases

  • Positioning resource nodes on a game map to maximize collection while avoiding blocked terrain
  • Deploying sensors with overlapping coverage to maximize area while respecting line-of-sight
  • Placing facilities around a central hub subject to distance limits
  • Allocating limited defensive units to tiles where adjacency grants defensive bonuses
  • Selecting billboard locations on a city grid with zoning constraints and audience clustering

FAQ

How much pruning is safe without losing good solutions?

Prune tiles that violate hard constraints or are strictly dominated; be cautious removing tiles only by weak heuristic scores—keep a safety margin to avoid discarding useful diversity.

When should I rely on greedy expansion versus deeper search?

Use greedy expansion for speed and when anchors strongly constrain choices; employ deeper or stochastic local search if adjacency interactions are complex or greedy solutions plateau.