You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/en/docs/getting-started/_index.md
+38-2Lines changed: 38 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,8 +2,8 @@
2
2
title: Getting Started
3
3
linkTitle: "Getting Started"
4
4
description: Quickstart Guides — repository layout, prerequisites, and how to run examples locally.
5
-
categories: [Examples, Quickstarts]
6
-
tags: [solverforge, quickstarts, python, docs]
5
+
categories: [Quickstarts]
6
+
tags: [quickstart, python]
7
7
weight: 2
8
8
---
9
9
@@ -19,6 +19,42 @@ We're working hard to deliver proper bindings. Stay tuned!
19
19
20
20
The quickstart guides below demonstrate constraint-solver patterns using the legacy Python implementation. They serve as reference material for understanding SolverForge concepts while the new bindings are being developed.
21
21
22
+
## Choose a Quickstart
23
+
24
+
{{< cardpane >}}
25
+
{{< card header="**Employee Scheduling**" >}}
26
+
Assign staff to shifts based on skills and availability.
27
+
Perfect for learning core optimization concepts.
28
+
29
+
[Start Tutorial →](employee-scheduling/)
30
+
{{< /card >}}
31
+
{{< card header="**Meeting Scheduling**" >}}
32
+
Find optimal times and rooms for meetings while avoiding conflicts.
33
+
34
+
[Start Tutorial →](meeting-scheduling/)
35
+
{{< /card >}}
36
+
{{< card header="**Vehicle Routing**" >}}
37
+
Plan delivery routes that minimize travel time with capacity constraints.
38
+
39
+
[Start Tutorial →](vehicle-routing/)
40
+
{{< /card >}}
41
+
{{< /cardpane >}}
42
+
43
+
{{< cardpane >}}
44
+
{{< card header="**School Timetabling**" >}}
45
+
Schedule lessons to rooms and timeslots without teacher or room conflicts.
Copy file name to clipboardExpand all lines: content/en/docs/getting-started/meeting-scheduling.md
+8-4Lines changed: 8 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,9 +3,11 @@ title: "Meeting Scheduling"
3
3
linkTitle: "Meeting Scheduling"
4
4
icon: fa-brands fa-python
5
5
date: 2025-11-26
6
+
weight: 20
7
+
draft: true
6
8
description: "A comprehensive quickstart guide to understanding and building intelligent meeting scheduling with SolverForge"
7
-
categories: [Examples]
8
-
tags: [scheduling, optimization, meetings, calendar, tutorial]
9
+
categories: [Quickstarts]
10
+
tags: [quickstart, python]
9
11
---
10
12
11
13
{{% pageinfo %}}
@@ -45,7 +47,9 @@ This guide walks you through a complete meeting scheduling application built wit
45
47
46
48
**No optimization background required** — we'll explain concepts as we encounter them in the code.
47
49
48
-
> **Architecture Note:** This implementation uses dataclass domain models for optimal solver performance. See [benchmark results](/blog/news/python-constraint-solver-architecture/#results-meeting-scheduling) showing this approach completes 60/60 optimization iterations while Pydantic-based alternatives complete only 46-58. Note: benchmarks were run on small test problems; JPype bridge overhead may increase at larger scales.
50
+
{{% alert title="Architecture Note" %}}
51
+
This implementation uses dataclass domain models for optimal solver performance. See [benchmark results](/blog/technical/python-constraint-solver-architecture/#results-meeting-scheduling) showing this approach completes 60/60 optimization iterations while Pydantic-based alternatives complete only 46-58. Note: benchmarks were run on small test problems; JPype bridge overhead may increase at larger scales.
52
+
{{% /alert %}}
49
53
50
54
### Prerequisites
51
55
@@ -317,7 +321,7 @@ class MeetingAssignment:
317
321
318
322
**Optimization concept:** Unlike employee scheduling (one variable: which employee) or vehicle routing (one list variable: which visits), this problem has **two independent planning variables** per entity. The solver must simultaneously decide both time and room.
319
323
320
-
**Why multiple planning variables matter:** Having two planning variables (time and room) per entity creates a larger search space but more flexibility. The dataclass-based domain model enables efficient evaluation of variable combinations. For architectural details on why dataclasses outperform Pydantic in constraint evaluation, see [Dataclasses vs Pydantic in Constraint Solvers](/blog/news/python-constraint-solver-architecture/).
324
+
**Why multiple planning variables matter:** Having two planning variables (time and room) per entity creates a larger search space but more flexibility. The dataclass-based domain model enables efficient evaluation of variable combinations. For architectural details on why dataclasses outperform Pydantic in constraint evaluation, see [Dataclasses vs Pydantic in Constraint Solvers](/blog/technical/python-constraint-solver-architecture/).
@@ -45,7 +47,9 @@ This guide walks you through a complete vehicle routing application built with *
45
47
46
48
**No optimization background required** — we'll explain concepts as we encounter them in the code.
47
49
48
-
> **Performance Note:** Vehicle routing is particularly sensitive to constraint evaluation performance, as the solver must recalculate distances and arrival times millions of times during optimization. This implementation uses the "fast" dataclass architecture—see [benchmark results](/blog/news/python-constraint-solver-architecture/#results-vehicle-routing). Note: benchmarks were run on small test problems (25-77 customers); JPype bridge overhead may compound at larger scales.
50
+
{{% alert title="Performance Note" %}}
51
+
Vehicle routing is particularly sensitive to constraint evaluation performance, as the solver must recalculate distances and arrival times millions of times during optimization. This implementation uses the "fast" dataclass architecture—see [benchmark results](/blog/technical/python-constraint-solver-architecture/#results-vehicle-routing). Note: benchmarks were run on small test problems (25-77 customers); JPype bridge overhead may compound at larger scales.
52
+
{{% /alert %}}
49
53
50
54
### Prerequisites
51
55
@@ -373,7 +377,7 @@ Routes are built using **shadow variable chaining**:
373
377
374
378
**Optimization concept:** This is **incremental score calculation**. When the solver moves one visit, only affected arrival times recalculate — not the entire solution. This enables evaluating millions of route modifications per second.
375
379
376
-
**Why this matters for performance:** Shadow variables enable efficient incremental updates. With Pydantic models, validation overhead would occur on every update—compounding across millions of moves per second. The dataclass approach avoids this overhead entirely. See [benchmark analysis](/blog/news/python-constraint-solver-architecture/#object-equality-in-hot-paths) for details on this architectural choice.
380
+
**Why this matters for performance:** Shadow variables enable efficient incremental updates. With Pydantic models, validation overhead would occur on every update—compounding across millions of moves per second. The dataclass approach avoids this overhead entirely. See [benchmark analysis](/blog/technical/python-constraint-solver-architecture/#object-equality-in-hot-paths) for details on this architectural choice.
Copy file name to clipboardExpand all lines: content/en/docs/overview.md
+40-21Lines changed: 40 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,7 @@
2
2
title: Overview
3
3
description: What SolverForge is, how it differs from mathematical solvers, and the project roadmap.
4
4
weight: 1
5
+
tags: [concepts]
5
6
---
6
7
7
8
# What is SolverForge?
@@ -10,16 +11,31 @@ SolverForge is a **constraint satisfaction solver** for real-world planning and
10
11
11
12
## What Problems Does It Solve?
12
13
13
-
SolverForge excels at **combinatorial planning problems** where you need to:
14
-
15
-
-**Employee Scheduling** — Assign staff to shifts based on skills, availability, and labor regulations
16
-
-**Vehicle Routing** — Plan delivery routes that minimize travel time while meeting time windows
17
-
-**School Timetabling** — Schedule lessons to rooms and timeslots without conflicts
18
-
-**Task Assignment** — Allocate jobs to workers or machines optimally
19
-
-**Meeting Scheduling** — Find times and rooms that work for all attendees
20
-
-**Bin Packing** — Fit items into containers efficiently
21
-
22
-
These are problems where a brute-force search is impossible (millions to billions of possibilities), but a good solution dramatically improves efficiency.
14
+
SolverForge excels at **combinatorial planning problems** — problems where a brute-force search is impossible (millions to billions of possibilities), but a good solution dramatically improves efficiency.
15
+
16
+
{{< cardpane >}}
17
+
{{< card header="**Employee Scheduling**" >}}
18
+
Assign staff to shifts based on skills, availability, and labor regulations.
19
+
{{< /card >}}
20
+
{{< card header="**Vehicle Routing**" >}}
21
+
Plan delivery routes that minimize travel time while meeting time windows.
22
+
{{< /card >}}
23
+
{{< card header="**School Timetabling**" >}}
24
+
Schedule lessons to rooms and timeslots without conflicts.
25
+
{{< /card >}}
26
+
{{< /cardpane >}}
27
+
28
+
{{< cardpane >}}
29
+
{{< card header="**Task Assignment**" >}}
30
+
Allocate jobs to workers or machines optimally.
31
+
{{< /card >}}
32
+
{{< card header="**Meeting Scheduling**" >}}
33
+
Find times and rooms that work for all attendees.
34
+
{{< /card >}}
35
+
{{< card header="**Bin Packing**" >}}
36
+
Fit items into containers efficiently.
37
+
{{< /card >}}
38
+
{{< /cardpane >}}
23
39
24
40
## How Is This Different from Gurobi or CVXPY?
25
41
@@ -35,15 +51,8 @@ This is a common question. **SolverForge and mathematical programming solvers (G
35
51
36
52
### A Concrete Example
37
53
38
-
**Mathematical programming (Gurobi/CVXPY):**
39
-
```python
40
-
# You must translate your problem into mathematical form
41
-
x = model.addVars(employees, shifts, vtype=GRB.BINARY)
42
-
model.addConstrs(sum(x[e,s] for e in employees) ==1for s in shifts)
43
-
model.addConstrs(sum(x[e,s] for s in shifts) <= max_shifts for e in employees)
44
-
```
45
-
46
-
**Constraint satisfaction (SolverForge):**
54
+
{{< tabpane text=true >}}
55
+
{{% tab header="SolverForge" %}}
47
56
```python
48
57
# You describe rules about your business objects directly
# You must translate your problem into mathematical form
73
+
x = model.addVars(employees, shifts, vtype=GRB.BINARY)
74
+
model.addConstrs(sum(x[e,s] for e in employees) ==1for s in shifts)
75
+
model.addConstrs(sum(x[e,s] for s in shifts) <= max_shifts for e in employees)
76
+
```
77
+
{{% /tab %}}
78
+
{{< /tabpane >}}
60
79
61
80
**The key difference:** With SolverForge, you work with domain objects (`Shift`, `Employee`) and express constraints as natural business rules. You don't need to reformulate your problem as a system of linear equations.
62
81
@@ -115,7 +134,7 @@ SolverForge is under active development. The Python API shown above works today
115
134
|**solverforge-core**| ✅ Complete | High-performance Rust backend — foundation complete, not yet user-facing |
116
135
|**Python bindings**| 🚧 In progress | PyO3-based bindings to the fast Rust core — coming Q1-Q2 2026 |
117
136
118
-
**Want to try it today?** Start with the [Python quickstarts](/docs/getting-started/hello-world/) using `solverforge-legacy`.
137
+
**Want to try it today?** Start with the [Python quickstarts](/docs/getting-started/) using `solverforge-legacy`.
119
138
120
139
## Roadmap
121
140
@@ -143,7 +162,7 @@ Making the fast Rust core available to Python developers:
143
162
144
163
## How You Can Help
145
164
146
-
-**Try the quickstarts** — [Build your first solver](/docs/getting-started/hello-world/) and share feedback
165
+
-**Try the quickstarts** — [Try a quickstart](/docs/getting-started/) and share feedback
147
166
-**Report issues** — Found a bug or have a suggestion? [Open an issue](https://github.com/solverforge/solverforge/issues)
0 commit comments