@cogitator-ai/neuro-symbolic 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +494 -0
- package/dist/constraints/dsl.d.ts +68 -0
- package/dist/constraints/dsl.d.ts.map +1 -0
- package/dist/constraints/dsl.js +419 -0
- package/dist/constraints/dsl.js.map +1 -0
- package/dist/constraints/index.d.ts +7 -0
- package/dist/constraints/index.d.ts.map +1 -0
- package/dist/constraints/index.js +18 -0
- package/dist/constraints/index.js.map +1 -0
- package/dist/constraints/prompts.d.ts +44 -0
- package/dist/constraints/prompts.d.ts.map +1 -0
- package/dist/constraints/prompts.js +175 -0
- package/dist/constraints/prompts.js.map +1 -0
- package/dist/constraints/simple-sat-solver.d.ts +21 -0
- package/dist/constraints/simple-sat-solver.d.ts.map +1 -0
- package/dist/constraints/simple-sat-solver.js +378 -0
- package/dist/constraints/simple-sat-solver.js.map +1 -0
- package/dist/constraints/z3-wasm-solver.d.ts +20 -0
- package/dist/constraints/z3-wasm-solver.d.ts.map +1 -0
- package/dist/constraints/z3-wasm-solver.js +286 -0
- package/dist/constraints/z3-wasm-solver.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge-graph/index.d.ts +5 -0
- package/dist/knowledge-graph/index.d.ts.map +1 -0
- package/dist/knowledge-graph/index.js +5 -0
- package/dist/knowledge-graph/index.js.map +1 -0
- package/dist/knowledge-graph/natural-language-query.d.ts +42 -0
- package/dist/knowledge-graph/natural-language-query.d.ts.map +1 -0
- package/dist/knowledge-graph/natural-language-query.js +271 -0
- package/dist/knowledge-graph/natural-language-query.js.map +1 -0
- package/dist/knowledge-graph/prompts.d.ts +56 -0
- package/dist/knowledge-graph/prompts.d.ts.map +1 -0
- package/dist/knowledge-graph/prompts.js +198 -0
- package/dist/knowledge-graph/prompts.js.map +1 -0
- package/dist/knowledge-graph/query-language.d.ts +43 -0
- package/dist/knowledge-graph/query-language.d.ts.map +1 -0
- package/dist/knowledge-graph/query-language.js +569 -0
- package/dist/knowledge-graph/query-language.js.map +1 -0
- package/dist/knowledge-graph/reasoning-engine.d.ts +53 -0
- package/dist/knowledge-graph/reasoning-engine.d.ts.map +1 -0
- package/dist/knowledge-graph/reasoning-engine.js +337 -0
- package/dist/knowledge-graph/reasoning-engine.js.map +1 -0
- package/dist/logic/builtins.d.ts +10 -0
- package/dist/logic/builtins.d.ts.map +1 -0
- package/dist/logic/builtins.js +527 -0
- package/dist/logic/builtins.js.map +1 -0
- package/dist/logic/index.d.ts +8 -0
- package/dist/logic/index.d.ts.map +1 -0
- package/dist/logic/index.js +8 -0
- package/dist/logic/index.js.map +1 -0
- package/dist/logic/knowledge-base.d.ts +38 -0
- package/dist/logic/knowledge-base.d.ts.map +1 -0
- package/dist/logic/knowledge-base.js +205 -0
- package/dist/logic/knowledge-base.js.map +1 -0
- package/dist/logic/parser.d.ts +19 -0
- package/dist/logic/parser.d.ts.map +1 -0
- package/dist/logic/parser.js +466 -0
- package/dist/logic/parser.js.map +1 -0
- package/dist/logic/prompts.d.ts +55 -0
- package/dist/logic/prompts.d.ts.map +1 -0
- package/dist/logic/prompts.js +230 -0
- package/dist/logic/prompts.js.map +1 -0
- package/dist/logic/proof-tree.d.ts +30 -0
- package/dist/logic/proof-tree.d.ts.map +1 -0
- package/dist/logic/proof-tree.js +281 -0
- package/dist/logic/proof-tree.js.map +1 -0
- package/dist/logic/resolver.d.ts +16 -0
- package/dist/logic/resolver.d.ts.map +1 -0
- package/dist/logic/resolver.js +382 -0
- package/dist/logic/resolver.js.map +1 -0
- package/dist/logic/unification.d.ts +17 -0
- package/dist/logic/unification.d.ts.map +1 -0
- package/dist/logic/unification.js +257 -0
- package/dist/logic/unification.js.map +1 -0
- package/dist/orchestrator.d.ts +57 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +293 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/planning/action-schema.d.ts +48 -0
- package/dist/planning/action-schema.d.ts.map +1 -0
- package/dist/planning/action-schema.js +358 -0
- package/dist/planning/action-schema.js.map +1 -0
- package/dist/planning/index.d.ts +6 -0
- package/dist/planning/index.d.ts.map +1 -0
- package/dist/planning/index.js +6 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/invariant-checker.d.ts +39 -0
- package/dist/planning/invariant-checker.d.ts.map +1 -0
- package/dist/planning/invariant-checker.js +293 -0
- package/dist/planning/invariant-checker.js.map +1 -0
- package/dist/planning/plan-repair.d.ts +38 -0
- package/dist/planning/plan-repair.d.ts.map +1 -0
- package/dist/planning/plan-repair.js +366 -0
- package/dist/planning/plan-repair.js.map +1 -0
- package/dist/planning/plan-validator.d.ts +31 -0
- package/dist/planning/plan-validator.d.ts.map +1 -0
- package/dist/planning/plan-validator.js +379 -0
- package/dist/planning/plan-validator.js.map +1 -0
- package/dist/planning/prompts.d.ts +50 -0
- package/dist/planning/prompts.d.ts.map +1 -0
- package/dist/planning/prompts.js +186 -0
- package/dist/planning/prompts.js.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { constraintToString, problemToString, expressionToString } from './dsl';
|
|
2
|
+
export function createNLToConstraintsPrompt(ctx) {
|
|
3
|
+
const hints = ctx.variableHints?.length
|
|
4
|
+
? `\nVariable hints: ${ctx.variableHints.join(', ')}`
|
|
5
|
+
: '';
|
|
6
|
+
const domain = ctx.domain ? `\nDomain context: ${ctx.domain}` : '';
|
|
7
|
+
return `You are a constraint programming expert. Convert the following natural language problem description into a constraint satisfaction problem.
|
|
8
|
+
|
|
9
|
+
Problem description:
|
|
10
|
+
"${ctx.description}"${hints}${domain}
|
|
11
|
+
|
|
12
|
+
Respond with a JSON object:
|
|
13
|
+
{
|
|
14
|
+
"variables": [
|
|
15
|
+
{
|
|
16
|
+
"name": "variable_name",
|
|
17
|
+
"type": "bool" | "int" | "real",
|
|
18
|
+
"domain": { "min": number, "max": number }
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"constraints": [
|
|
22
|
+
{
|
|
23
|
+
"description": "human-readable description",
|
|
24
|
+
"expression": "variable expression using: ==, !=, <, >, <=, >=, +, -, *, /, &&, ||, !"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"objective": {
|
|
28
|
+
"type": "minimize" | "maximize",
|
|
29
|
+
"expression": "expression to optimize"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
JSON:`;
|
|
34
|
+
}
|
|
35
|
+
export function createConstraintExplanationPrompt(ctx) {
|
|
36
|
+
const problemStr = problemToString(ctx.problem);
|
|
37
|
+
let resultStr;
|
|
38
|
+
if (ctx.result.status === 'sat') {
|
|
39
|
+
const assignments = Object.entries(ctx.result.model.assignments)
|
|
40
|
+
.map(([k, v]) => ` ${k} = ${v}`)
|
|
41
|
+
.join('\n');
|
|
42
|
+
resultStr = `Status: Satisfiable\n\nAssignments:\n${assignments}`;
|
|
43
|
+
if (ctx.result.model.objectiveValue !== undefined) {
|
|
44
|
+
resultStr += `\n\nObjective value: ${ctx.result.model.objectiveValue}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (ctx.result.status === 'unsat') {
|
|
48
|
+
resultStr = 'Status: Unsatisfiable - No solution exists that satisfies all constraints.';
|
|
49
|
+
}
|
|
50
|
+
else if (ctx.result.status === 'timeout') {
|
|
51
|
+
resultStr = 'Status: Timeout - The solver ran out of time.';
|
|
52
|
+
}
|
|
53
|
+
else if (ctx.result.status === 'unknown') {
|
|
54
|
+
resultStr = `Status: Unknown - ${ctx.result.reason}`;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
resultStr = `Status: Error - ${ctx.result.message}`;
|
|
58
|
+
}
|
|
59
|
+
return `Explain the following constraint satisfaction problem and its solution in natural language.
|
|
60
|
+
|
|
61
|
+
${problemStr}
|
|
62
|
+
|
|
63
|
+
Result:
|
|
64
|
+
${resultStr}
|
|
65
|
+
|
|
66
|
+
Provide a clear explanation of:
|
|
67
|
+
1. What the problem is asking for
|
|
68
|
+
2. What the variables represent
|
|
69
|
+
3. What constraints must be satisfied
|
|
70
|
+
4. Why the given solution works (or why no solution exists)`;
|
|
71
|
+
}
|
|
72
|
+
export function createUnsatAnalysisPrompt(ctx) {
|
|
73
|
+
const problemStr = problemToString(ctx.problem);
|
|
74
|
+
const coreInfo = ctx.unsatCore?.length
|
|
75
|
+
? `\nUnsatisfiable core (conflicting constraints):\n${ctx.unsatCore
|
|
76
|
+
.map((id) => {
|
|
77
|
+
const constraint = ctx.problem.constraints.find((c) => c.id === id);
|
|
78
|
+
return constraint ? ` - ${constraintToString(constraint)}` : ` - ${id}`;
|
|
79
|
+
})
|
|
80
|
+
.join('\n')}`
|
|
81
|
+
: '';
|
|
82
|
+
return `The following constraint satisfaction problem is unsatisfiable. Analyze why and suggest how to fix it.
|
|
83
|
+
|
|
84
|
+
${problemStr}${coreInfo}
|
|
85
|
+
|
|
86
|
+
Analyze:
|
|
87
|
+
1. Which constraints are in conflict
|
|
88
|
+
2. Why they cannot all be satisfied simultaneously
|
|
89
|
+
3. Suggestions for relaxing or modifying constraints to make the problem solvable`;
|
|
90
|
+
}
|
|
91
|
+
export function createConstraintSuggestionPrompt(ctx) {
|
|
92
|
+
return `Given a partial constraint problem and a goal, suggest additional constraints or variables that would help achieve the goal.
|
|
93
|
+
|
|
94
|
+
Current problem:
|
|
95
|
+
${ctx.partialProblem}
|
|
96
|
+
|
|
97
|
+
Goal:
|
|
98
|
+
${ctx.goal}
|
|
99
|
+
|
|
100
|
+
Suggest:
|
|
101
|
+
1. Additional variables if needed
|
|
102
|
+
2. Additional constraints to achieve the goal
|
|
103
|
+
3. Optimization objective if applicable
|
|
104
|
+
|
|
105
|
+
Provide suggestions in the same JSON format as before.`;
|
|
106
|
+
}
|
|
107
|
+
export function parseNLConstraintsResponse(response) {
|
|
108
|
+
try {
|
|
109
|
+
const jsonMatch = /\{[\s\S]*\}/.exec(response);
|
|
110
|
+
if (!jsonMatch)
|
|
111
|
+
return null;
|
|
112
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
113
|
+
return {
|
|
114
|
+
variables: (parsed.variables || []).map((v) => ({
|
|
115
|
+
name: String(v.name || ''),
|
|
116
|
+
type: v.type || 'int',
|
|
117
|
+
domain: v.domain,
|
|
118
|
+
})),
|
|
119
|
+
constraints: (parsed.constraints || []).map((c) => ({
|
|
120
|
+
description: String(c.description || ''),
|
|
121
|
+
expression: String(c.expression || ''),
|
|
122
|
+
})),
|
|
123
|
+
objective: parsed.objective
|
|
124
|
+
? {
|
|
125
|
+
type: parsed.objective.type,
|
|
126
|
+
expression: String(parsed.objective.expression),
|
|
127
|
+
}
|
|
128
|
+
: undefined,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export function formatSolverResultForLLM(result) {
|
|
136
|
+
switch (result.status) {
|
|
137
|
+
case 'sat': {
|
|
138
|
+
const lines = ['Solution found:'];
|
|
139
|
+
for (const [name, value] of Object.entries(result.model.assignments)) {
|
|
140
|
+
lines.push(` ${name} = ${value}`);
|
|
141
|
+
}
|
|
142
|
+
if (result.model.objectiveValue !== undefined) {
|
|
143
|
+
lines.push(` Objective value: ${result.model.objectiveValue}`);
|
|
144
|
+
}
|
|
145
|
+
return lines.join('\n');
|
|
146
|
+
}
|
|
147
|
+
case 'unsat':
|
|
148
|
+
return 'No solution exists - the constraints are contradictory.';
|
|
149
|
+
case 'timeout':
|
|
150
|
+
return 'The solver timed out before finding a solution.';
|
|
151
|
+
case 'unknown':
|
|
152
|
+
return `Solver returned unknown: ${result.reason}`;
|
|
153
|
+
case 'error':
|
|
154
|
+
return `Solver error: ${result.message}`;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export function formatProblemSummary(problem) {
|
|
158
|
+
const varTypes = problem.variables.reduce((acc, v) => {
|
|
159
|
+
acc[v.type] = (acc[v.type] || 0) + 1;
|
|
160
|
+
return acc;
|
|
161
|
+
}, {});
|
|
162
|
+
const typeStr = Object.entries(varTypes)
|
|
163
|
+
.map(([t, c]) => `${c} ${t}`)
|
|
164
|
+
.join(', ');
|
|
165
|
+
const hardCount = problem.constraints.filter((c) => c.isHard).length;
|
|
166
|
+
const softCount = problem.constraints.length - hardCount;
|
|
167
|
+
let summary = `Problem: ${problem.name || 'Unnamed'}\n`;
|
|
168
|
+
summary += `Variables: ${problem.variables.length} (${typeStr})\n`;
|
|
169
|
+
summary += `Constraints: ${hardCount} hard, ${softCount} soft\n`;
|
|
170
|
+
if (problem.objective) {
|
|
171
|
+
summary += `Objective: ${problem.objective.type} ${expressionToString(problem.objective.expression)}`;
|
|
172
|
+
}
|
|
173
|
+
return summary;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/constraints/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ConstraintProblem, SolverResult } from '@cogitator-ai/types';
|
|
2
|
+
export interface SimpleSATConfig {
|
|
3
|
+
timeout: number;
|
|
4
|
+
maxIterations: number;
|
|
5
|
+
randomSeed?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function solveSAT(problem: ConstraintProblem, config?: Partial<SimpleSATConfig>): SolverResult;
|
|
8
|
+
export declare class SimpleSATSolver {
|
|
9
|
+
private config;
|
|
10
|
+
constructor(config?: Partial<SimpleSATConfig>);
|
|
11
|
+
solve(problem: ConstraintProblem): SolverResult;
|
|
12
|
+
check(problem: ConstraintProblem, assignment: Record<string, boolean | number>): boolean;
|
|
13
|
+
evaluate(problem: ConstraintProblem, assignment: Record<string, boolean | number>): {
|
|
14
|
+
satisfied: boolean;
|
|
15
|
+
violatedHard: string[];
|
|
16
|
+
violatedSoft: string[];
|
|
17
|
+
softScore: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare function createSimpleSATSolver(config?: Partial<SimpleSATConfig>): SimpleSATSolver;
|
|
21
|
+
//# sourceMappingURL=simple-sat-solver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-sat-solver.d.ts","sourceRoot":"","sources":["../../src/constraints/simple-sat-solver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAIjB,YAAY,EAEb,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgZD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,YAAY,CAyBd;AA+BD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAIjD,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY;IAI/C,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,OAAO;IAMxF,QAAQ,CACN,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,GAC3C;QACD,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;KACnB;CAIF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAExF"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
const DEFAULT_CONFIG = {
|
|
2
|
+
timeout: 10000,
|
|
3
|
+
maxIterations: 10000,
|
|
4
|
+
};
|
|
5
|
+
function evaluateExpression(expr, assignment) {
|
|
6
|
+
switch (expr.type) {
|
|
7
|
+
case 'variable': {
|
|
8
|
+
const value = assignment.get(expr.name);
|
|
9
|
+
if (value === undefined)
|
|
10
|
+
return null;
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
case 'constant':
|
|
14
|
+
return expr.value;
|
|
15
|
+
case 'operation': {
|
|
16
|
+
const operands = expr.operands.map((op) => evaluateExpression(op, assignment));
|
|
17
|
+
if (operands.some((op) => op === null)) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
switch (expr.operator) {
|
|
21
|
+
case 'not':
|
|
22
|
+
return !operands[0];
|
|
23
|
+
case 'and':
|
|
24
|
+
return operands.every((op) => op === true);
|
|
25
|
+
case 'or':
|
|
26
|
+
return operands.some((op) => op === true);
|
|
27
|
+
case 'implies':
|
|
28
|
+
return !operands[0] || !!operands[1];
|
|
29
|
+
case 'iff':
|
|
30
|
+
return operands[0] === operands[1];
|
|
31
|
+
case 'eq':
|
|
32
|
+
return operands[0] === operands[1];
|
|
33
|
+
case 'neq':
|
|
34
|
+
return operands[0] !== operands[1];
|
|
35
|
+
case 'gt':
|
|
36
|
+
return operands[0] > operands[1];
|
|
37
|
+
case 'gte':
|
|
38
|
+
return operands[0] >= operands[1];
|
|
39
|
+
case 'lt':
|
|
40
|
+
return operands[0] < operands[1];
|
|
41
|
+
case 'lte':
|
|
42
|
+
return operands[0] <= operands[1];
|
|
43
|
+
case 'add':
|
|
44
|
+
return operands.reduce((a, b) => a + b, 0);
|
|
45
|
+
case 'sub':
|
|
46
|
+
return operands[0] - operands[1];
|
|
47
|
+
case 'mul':
|
|
48
|
+
return operands.reduce((a, b) => a * b, 1);
|
|
49
|
+
case 'div':
|
|
50
|
+
return operands[0] / operands[1];
|
|
51
|
+
case 'mod':
|
|
52
|
+
return operands[0] % operands[1];
|
|
53
|
+
case 'pow':
|
|
54
|
+
return Math.pow(operands[0], operands[1]);
|
|
55
|
+
case 'abs':
|
|
56
|
+
return Math.abs(operands[0]);
|
|
57
|
+
case 'min':
|
|
58
|
+
return Math.min(...operands);
|
|
59
|
+
case 'max':
|
|
60
|
+
return Math.max(...operands);
|
|
61
|
+
case 'ite':
|
|
62
|
+
return operands[0] ? operands[1] : operands[2];
|
|
63
|
+
case 'allDifferent': {
|
|
64
|
+
const seen = new Set();
|
|
65
|
+
for (const op of operands) {
|
|
66
|
+
if (seen.has(op))
|
|
67
|
+
return false;
|
|
68
|
+
seen.add(op);
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
case 'atMost': {
|
|
73
|
+
const k = operands[0];
|
|
74
|
+
const trueCount = operands.slice(1).filter((op) => op === true).length;
|
|
75
|
+
return trueCount <= k;
|
|
76
|
+
}
|
|
77
|
+
case 'atLeast': {
|
|
78
|
+
const k = operands[0];
|
|
79
|
+
const trueCount = operands.slice(1).filter((op) => op === true).length;
|
|
80
|
+
return trueCount >= k;
|
|
81
|
+
}
|
|
82
|
+
case 'exactly': {
|
|
83
|
+
const k = operands[0];
|
|
84
|
+
const trueCount = operands.slice(1).filter((op) => op === true).length;
|
|
85
|
+
return trueCount === k;
|
|
86
|
+
}
|
|
87
|
+
default:
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function checkConstraint(constraint, assignment) {
|
|
94
|
+
const result = evaluateExpression(constraint.expression, assignment);
|
|
95
|
+
return result === true;
|
|
96
|
+
}
|
|
97
|
+
function checkAllConstraints(constraints, assignment) {
|
|
98
|
+
const violatedHard = [];
|
|
99
|
+
const violatedSoft = [];
|
|
100
|
+
let softScore = 0;
|
|
101
|
+
for (const constraint of constraints) {
|
|
102
|
+
const satisfied = checkConstraint(constraint, assignment);
|
|
103
|
+
if (!satisfied) {
|
|
104
|
+
if (constraint.isHard) {
|
|
105
|
+
violatedHard.push(constraint.id);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
violatedSoft.push(constraint.id);
|
|
109
|
+
softScore += constraint.weight || 1;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
satisfied: violatedHard.length === 0,
|
|
115
|
+
violatedHard,
|
|
116
|
+
violatedSoft,
|
|
117
|
+
softScore,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function generateInitialAssignment(variables) {
|
|
121
|
+
const assignment = new Map();
|
|
122
|
+
for (const v of variables) {
|
|
123
|
+
switch (v.type) {
|
|
124
|
+
case 'bool':
|
|
125
|
+
assignment.set(v.name, false);
|
|
126
|
+
break;
|
|
127
|
+
case 'int':
|
|
128
|
+
if (v.domain) {
|
|
129
|
+
const min = v.domain.min ?? 0;
|
|
130
|
+
assignment.set(v.name, min);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
assignment.set(v.name, 0);
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
case 'real':
|
|
137
|
+
if (v.domain) {
|
|
138
|
+
const min = v.domain.min ?? 0;
|
|
139
|
+
assignment.set(v.name, min);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
assignment.set(v.name, 0);
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
case 'bitvec':
|
|
146
|
+
assignment.set(v.name, 0);
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return assignment;
|
|
151
|
+
}
|
|
152
|
+
function flipVariable(assignment, variable) {
|
|
153
|
+
const neighbors = [];
|
|
154
|
+
const current = assignment.get(variable.name);
|
|
155
|
+
if (current === undefined)
|
|
156
|
+
return neighbors;
|
|
157
|
+
switch (variable.type) {
|
|
158
|
+
case 'bool': {
|
|
159
|
+
const neighbor = new Map(assignment);
|
|
160
|
+
neighbor.set(variable.name, !current);
|
|
161
|
+
neighbors.push(neighbor);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
case 'int': {
|
|
165
|
+
const min = variable.domain?.min ?? -1000;
|
|
166
|
+
const max = variable.domain?.max ?? 1000;
|
|
167
|
+
const val = current;
|
|
168
|
+
if (val > min) {
|
|
169
|
+
const neighbor = new Map(assignment);
|
|
170
|
+
neighbor.set(variable.name, val - 1);
|
|
171
|
+
neighbors.push(neighbor);
|
|
172
|
+
}
|
|
173
|
+
if (val < max) {
|
|
174
|
+
const neighbor = new Map(assignment);
|
|
175
|
+
neighbor.set(variable.name, val + 1);
|
|
176
|
+
neighbors.push(neighbor);
|
|
177
|
+
}
|
|
178
|
+
for (const delta of [-10, -5, 5, 10]) {
|
|
179
|
+
const newVal = val + delta;
|
|
180
|
+
if (newVal >= min && newVal <= max) {
|
|
181
|
+
const neighbor = new Map(assignment);
|
|
182
|
+
neighbor.set(variable.name, newVal);
|
|
183
|
+
neighbors.push(neighbor);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
case 'real': {
|
|
189
|
+
const min = variable.domain?.min ?? -1000;
|
|
190
|
+
const max = variable.domain?.max ?? 1000;
|
|
191
|
+
const val = current;
|
|
192
|
+
for (const delta of [-1, -0.1, 0.1, 1]) {
|
|
193
|
+
const newVal = val + delta;
|
|
194
|
+
if (newVal >= min && newVal <= max) {
|
|
195
|
+
const neighbor = new Map(assignment);
|
|
196
|
+
neighbor.set(variable.name, newVal);
|
|
197
|
+
neighbors.push(neighbor);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return neighbors;
|
|
204
|
+
}
|
|
205
|
+
function countViolations(constraints, assignment) {
|
|
206
|
+
let count = 0;
|
|
207
|
+
for (const constraint of constraints) {
|
|
208
|
+
if (constraint.isHard && !checkConstraint(constraint, assignment)) {
|
|
209
|
+
count++;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return count;
|
|
213
|
+
}
|
|
214
|
+
function solveWithLocalSearch(problem, config) {
|
|
215
|
+
const startTime = Date.now();
|
|
216
|
+
let assignment = generateInitialAssignment(problem.variables);
|
|
217
|
+
let bestAssignment = assignment;
|
|
218
|
+
let bestViolations = countViolations(problem.constraints, assignment);
|
|
219
|
+
let iteration = 0;
|
|
220
|
+
let noImprovementCount = 0;
|
|
221
|
+
while (iteration < config.maxIterations) {
|
|
222
|
+
if (Date.now() - startTime > config.timeout) {
|
|
223
|
+
return { status: 'timeout' };
|
|
224
|
+
}
|
|
225
|
+
const check = checkAllConstraints(problem.constraints, assignment);
|
|
226
|
+
if (check.satisfied) {
|
|
227
|
+
const model = {
|
|
228
|
+
assignments: Object.fromEntries(assignment),
|
|
229
|
+
};
|
|
230
|
+
if (problem.objective) {
|
|
231
|
+
const objValue = evaluateExpression(problem.objective.expression, assignment);
|
|
232
|
+
if (typeof objValue === 'number') {
|
|
233
|
+
model.objectiveValue = objValue;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return { status: 'sat', model };
|
|
237
|
+
}
|
|
238
|
+
const violations = check.violatedHard.length;
|
|
239
|
+
if (violations < bestViolations) {
|
|
240
|
+
bestViolations = violations;
|
|
241
|
+
bestAssignment = new Map(assignment);
|
|
242
|
+
noImprovementCount = 0;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
noImprovementCount++;
|
|
246
|
+
}
|
|
247
|
+
if (noImprovementCount > 100) {
|
|
248
|
+
assignment = generateRandomAssignment(problem.variables);
|
|
249
|
+
noImprovementCount = 0;
|
|
250
|
+
}
|
|
251
|
+
let improved = false;
|
|
252
|
+
for (const variable of problem.variables) {
|
|
253
|
+
const neighbors = flipVariable(assignment, variable);
|
|
254
|
+
for (const neighbor of neighbors) {
|
|
255
|
+
const neighborViolations = countViolations(problem.constraints, neighbor);
|
|
256
|
+
if (neighborViolations < violations) {
|
|
257
|
+
assignment = neighbor;
|
|
258
|
+
improved = true;
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (improved)
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
if (!improved) {
|
|
266
|
+
const randomVar = problem.variables[Math.floor(Math.random() * problem.variables.length)];
|
|
267
|
+
const neighbors = flipVariable(assignment, randomVar);
|
|
268
|
+
if (neighbors.length > 0) {
|
|
269
|
+
assignment = neighbors[Math.floor(Math.random() * neighbors.length)];
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
iteration++;
|
|
273
|
+
}
|
|
274
|
+
const finalCheck = checkAllConstraints(problem.constraints, bestAssignment);
|
|
275
|
+
if (finalCheck.satisfied) {
|
|
276
|
+
const model = {
|
|
277
|
+
assignments: Object.fromEntries(bestAssignment),
|
|
278
|
+
};
|
|
279
|
+
return { status: 'sat', model };
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
status: 'unknown',
|
|
283
|
+
reason: `Could not find satisfying assignment after ${iteration} iterations. Best had ${bestViolations} violations.`,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function generateRandomAssignment(variables) {
|
|
287
|
+
const assignment = new Map();
|
|
288
|
+
for (const v of variables) {
|
|
289
|
+
switch (v.type) {
|
|
290
|
+
case 'bool':
|
|
291
|
+
assignment.set(v.name, Math.random() < 0.5);
|
|
292
|
+
break;
|
|
293
|
+
case 'int': {
|
|
294
|
+
const min = v.domain?.min ?? -100;
|
|
295
|
+
const max = v.domain?.max ?? 100;
|
|
296
|
+
assignment.set(v.name, Math.floor(Math.random() * (max - min + 1)) + min);
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
case 'real': {
|
|
300
|
+
const min = v.domain?.min ?? -100;
|
|
301
|
+
const max = v.domain?.max ?? 100;
|
|
302
|
+
assignment.set(v.name, Math.random() * (max - min) + min);
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
case 'bitvec': {
|
|
306
|
+
const maxVal = Math.pow(2, v.bitWidth || 8) - 1;
|
|
307
|
+
assignment.set(v.name, Math.floor(Math.random() * maxVal));
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return assignment;
|
|
313
|
+
}
|
|
314
|
+
export function solveSAT(problem, config = {}) {
|
|
315
|
+
const mergedConfig = { ...DEFAULT_CONFIG, ...config };
|
|
316
|
+
if (problem.variables.length === 0) {
|
|
317
|
+
return {
|
|
318
|
+
status: 'sat',
|
|
319
|
+
model: { assignments: {} },
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
if (problem.constraints.length === 0) {
|
|
323
|
+
const assignment = generateInitialAssignment(problem.variables);
|
|
324
|
+
const model = {
|
|
325
|
+
assignments: Object.fromEntries(assignment),
|
|
326
|
+
};
|
|
327
|
+
return { status: 'sat', model };
|
|
328
|
+
}
|
|
329
|
+
const isBooleanOnly = problem.variables.every((v) => v.type === 'bool');
|
|
330
|
+
if (isBooleanOnly && problem.variables.length <= 20) {
|
|
331
|
+
return solveWithBruteForce(problem, mergedConfig);
|
|
332
|
+
}
|
|
333
|
+
return solveWithLocalSearch(problem, mergedConfig);
|
|
334
|
+
}
|
|
335
|
+
function solveWithBruteForce(problem, config) {
|
|
336
|
+
const startTime = Date.now();
|
|
337
|
+
const n = problem.variables.length;
|
|
338
|
+
const total = Math.pow(2, n);
|
|
339
|
+
for (let i = 0; i < total; i++) {
|
|
340
|
+
if (Date.now() - startTime > config.timeout) {
|
|
341
|
+
return { status: 'timeout' };
|
|
342
|
+
}
|
|
343
|
+
const assignment = new Map();
|
|
344
|
+
for (let j = 0; j < n; j++) {
|
|
345
|
+
assignment.set(problem.variables[j].name, ((i >> j) & 1) === 1);
|
|
346
|
+
}
|
|
347
|
+
const check = checkAllConstraints(problem.constraints, assignment);
|
|
348
|
+
if (check.satisfied) {
|
|
349
|
+
const model = {
|
|
350
|
+
assignments: Object.fromEntries(assignment),
|
|
351
|
+
};
|
|
352
|
+
return { status: 'sat', model };
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return { status: 'unsat' };
|
|
356
|
+
}
|
|
357
|
+
export class SimpleSATSolver {
|
|
358
|
+
config;
|
|
359
|
+
constructor(config = {}) {
|
|
360
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
361
|
+
}
|
|
362
|
+
solve(problem) {
|
|
363
|
+
return solveSAT(problem, this.config);
|
|
364
|
+
}
|
|
365
|
+
check(problem, assignment) {
|
|
366
|
+
const assignmentMap = new Map(Object.entries(assignment));
|
|
367
|
+
const result = checkAllConstraints(problem.constraints, assignmentMap);
|
|
368
|
+
return result.satisfied;
|
|
369
|
+
}
|
|
370
|
+
evaluate(problem, assignment) {
|
|
371
|
+
const assignmentMap = new Map(Object.entries(assignment));
|
|
372
|
+
return checkAllConstraints(problem.constraints, assignmentMap);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
export function createSimpleSATSolver(config) {
|
|
376
|
+
return new SimpleSATSolver(config);
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=simple-sat-solver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-sat-solver.js","sourceRoot":"","sources":["../../src/constraints/simple-sat-solver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ConstraintProblem, SolverResult, ConstraintSolverConfig } from '@cogitator-ai/types';
|
|
2
|
+
export interface Z3SolverConfig extends ConstraintSolverConfig {
|
|
3
|
+
logLevel?: 'off' | 'error' | 'warn' | 'info' | 'debug';
|
|
4
|
+
}
|
|
5
|
+
export declare function isZ3Available(): Promise<boolean>;
|
|
6
|
+
export declare class Z3WASMSolver {
|
|
7
|
+
private config;
|
|
8
|
+
private ctx;
|
|
9
|
+
private variables;
|
|
10
|
+
constructor(config?: Partial<Z3SolverConfig>);
|
|
11
|
+
initialize(): Promise<void>;
|
|
12
|
+
private ensureInitialized;
|
|
13
|
+
private createVariable;
|
|
14
|
+
private translateExpression;
|
|
15
|
+
private addDomainConstraints;
|
|
16
|
+
solve(problem: ConstraintProblem): Promise<SolverResult>;
|
|
17
|
+
}
|
|
18
|
+
export declare function createZ3Solver(config?: Partial<Z3SolverConfig>): Z3WASMSolver;
|
|
19
|
+
export declare function solveWithZ3(problem: ConstraintProblem, config?: Partial<Z3SolverConfig>): Promise<SolverResult>;
|
|
20
|
+
//# sourceMappingURL=z3-wasm-solver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z3-wasm-solver.d.ts","sourceRoot":"","sources":["../../src/constraints/z3-wasm-solver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAGjB,YAAY,EAEZ,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,cAAe,SAAQ,sBAAsB;IAC5D,QAAQ,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CACxD;AA6BD,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAOtD;AAyED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,SAAS,CAA6B;gBAElC,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAI1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAMnB,iBAAiB;IAM/B,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,mBAAmB;IA4H3B,OAAO,CAAC,oBAAoB;IAiBtB,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;CAoG/D;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,YAAY,CAE7E;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,YAAY,CAAC,CAGvB"}
|