Skip to content

Commit 014bf85

Browse files
rsynekmswiderskiwinklermdiogodanielsoaresferreiraLDWNS
authored
feat: introduce an optimization model support as a preview (#2307)
Co-authored-by: Radovan Synek <radovan.synek@gmail.com> Co-authored-by: Maciej Swiderski <swiderski.maciej@gmail.com> Co-authored-by: Marek Winkler <winkler.marek@gmail.com> Co-authored-by: Diogo Ferreira <diogodsferreira@gmail.com> Co-authored-by: Lukas Downes <lukasdownes@gmail.com> Co-authored-by: Matej Čimbora <cimbora.matej@gmail.com> Co-authored-by: Cristiano Nicolai <cristiano.nicolai@gmail.com>
1 parent 8aecee1 commit 014bf85

489 files changed

Lines changed: 33911 additions & 35 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,7 @@ core/src/*/java/ai/timefold/solver/core/impl/solver/monitoring/** @triceo @Chris
2929
quarkus-integration/** @triceo @Christopher-Chianelli
3030
spring-integration/** @triceo @Christopher-Chianelli
3131

32+
model/** @triceo @rsynek
33+
3234
docs/** @triceo @TomCools
3335
**/*.adoc @triceo @TomCools

.mvn/maven.config

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-ntp
2+
-B
3+
# timefold-solver-model-parent configures maven plugins required for Timefold models, but failing the build
4+
# of that module itself. This way, we disable the plugin execution, while it remains active by default for models.
5+
-Dai.timefold.sdk.model.processing.disabled

README.adoc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ image:https://img.shields.io/github/issues/TimefoldAI/timefold-solver?style=for-
1616
{sonarBadge}&style=for-the-badge&metric=reliability_rating["Reliability Rating", {sonarLink}]
1717
{sonarBadge}&metric=security_rating["Security Rating", {sonarLink}]
1818
{sonarBadge}&metric=sqale_rating["Maintainability Rating", {sonarLink}]
19-
{sonarBadge}&metric=coverage["Coverage", {sonarLink}]
2019

2120
Timefold Solver is an AI constraint solver for Java and Kotlin.
2221
You can use Timefold Solver to optimize the Vehicle Routing Problem, Employee Rostering,

build/bom/pom.xml

Lines changed: 233 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>ai.timefold.solver</groupId>
88
<artifactId>timefold-solver-parent</artifactId>
9-
<version>999-SNAPSHOT</version>
9+
<version>${revision}</version>
1010
<relativePath>../../pom.xml</relativePath>
1111
</parent>
1212

@@ -288,6 +288,238 @@
288288
<type>test-jar</type>
289289
<version>${version.ai.timefold.solver}</version>
290290
</dependency>
291+
292+
<!-- Model artifacts -->
293+
<dependency>
294+
<groupId>ai.timefold.solver</groupId>
295+
<artifactId>timefold-solver-model</artifactId>
296+
<version>${version.ai.timefold.solver}</version>
297+
</dependency>
298+
<dependency>
299+
<groupId>ai.timefold.solver</groupId>
300+
<artifactId>timefold-solver-model</artifactId>
301+
<version>${version.ai.timefold.solver}</version>
302+
<classifier>sources</classifier>
303+
</dependency>
304+
<dependency>
305+
<groupId>ai.timefold.solver</groupId>
306+
<artifactId>timefold-solver-model-with-maps</artifactId>
307+
<version>${version.ai.timefold.solver}</version>
308+
</dependency>
309+
<dependency>
310+
<groupId>ai.timefold.solver</groupId>
311+
<artifactId>timefold-solver-model-with-maps</artifactId>
312+
<version>${version.ai.timefold.solver}</version>
313+
<classifier>sources</classifier>
314+
</dependency>
315+
316+
<dependency>
317+
<groupId>ai.timefold.solver</groupId>
318+
<artifactId>timefold-solver-model-definition</artifactId>
319+
<version>${version.ai.timefold.solver}</version>
320+
</dependency>
321+
<dependency>
322+
<groupId>ai.timefold.solver</groupId>
323+
<artifactId>timefold-solver-model-definition</artifactId>
324+
<version>${version.ai.timefold.solver}</version>
325+
<classifier>sources</classifier>
326+
</dependency>
327+
<dependency>
328+
<groupId>ai.timefold.solver</groupId>
329+
<artifactId>timefold-solver-model-jackson</artifactId>
330+
<version>${version.ai.timefold.solver}</version>
331+
</dependency>
332+
<dependency>
333+
<groupId>ai.timefold.solver</groupId>
334+
<artifactId>timefold-solver-model-jackson</artifactId>
335+
<version>${version.ai.timefold.solver}</version>
336+
<classifier>sources</classifier>
337+
</dependency>
338+
<dependency>
339+
<groupId>ai.timefold.solver</groupId>
340+
<artifactId>timefold-solver-model-json</artifactId>
341+
<version>${version.ai.timefold.solver}</version>
342+
</dependency>
343+
<dependency>
344+
<groupId>ai.timefold.solver</groupId>
345+
<artifactId>timefold-solver-model-json</artifactId>
346+
<version>${version.ai.timefold.solver}</version>
347+
<classifier>sources</classifier>
348+
</dependency>
349+
<dependency>
350+
<groupId>ai.timefold.solver</groupId>
351+
<artifactId>timefold-solver-model-rest-definition</artifactId>
352+
<version>${version.ai.timefold.solver}</version>
353+
</dependency>
354+
<dependency>
355+
<groupId>ai.timefold.solver</groupId>
356+
<artifactId>timefold-solver-model-rest-definition</artifactId>
357+
<version>${version.ai.timefold.solver}</version>
358+
<classifier>sources</classifier>
359+
</dependency>
360+
<dependency>
361+
<groupId>ai.timefold.solver</groupId>
362+
<artifactId>timefold-solver-model-rest</artifactId>
363+
<version>${version.ai.timefold.solver}</version>
364+
</dependency>
365+
<dependency>
366+
<groupId>ai.timefold.solver</groupId>
367+
<artifactId>timefold-solver-model-rest</artifactId>
368+
<version>${version.ai.timefold.solver}</version>
369+
<classifier>sources</classifier>
370+
</dependency>
371+
372+
<dependency>
373+
<groupId>ai.timefold.solver</groupId>
374+
<artifactId>timefold-solver-model-worker</artifactId>
375+
<version>${version.ai.timefold.solver}</version>
376+
</dependency>
377+
<dependency>
378+
<groupId>ai.timefold.solver</groupId>
379+
<artifactId>timefold-solver-model-worker</artifactId>
380+
<version>${version.ai.timefold.solver}</version>
381+
<classifier>sources</classifier>
382+
</dependency>
383+
384+
<dependency>
385+
<groupId>ai.timefold.solver</groupId>
386+
<artifactId>timefold-solver-model-quarkus</artifactId>
387+
<version>${version.ai.timefold.solver}</version>
388+
</dependency>
389+
<dependency>
390+
<groupId>ai.timefold.solver</groupId>
391+
<artifactId>timefold-solver-model-quarkus</artifactId>
392+
<version>${version.ai.timefold.solver}</version>
393+
<classifier>sources</classifier>
394+
</dependency>
395+
<dependency>
396+
<groupId>ai.timefold.solver</groupId>
397+
<artifactId>timefold-solver-model-quarkus-deployment</artifactId>
398+
<version>${version.ai.timefold.solver}</version>
399+
</dependency>
400+
<dependency>
401+
<groupId>ai.timefold.solver</groupId>
402+
<artifactId>timefold-solver-model-quarkus-deployment</artifactId>
403+
<version>${version.ai.timefold.solver}</version>
404+
<classifier>sources</classifier>
405+
</dependency>
406+
407+
<!-- maps -->
408+
<dependency>
409+
<groupId>ai.timefold.solver</groupId>
410+
<artifactId>timefold-solver-model-maps-api</artifactId>
411+
<version>${version.ai.timefold.solver}</version>
412+
</dependency>
413+
<dependency>
414+
<groupId>ai.timefold.solver</groupId>
415+
<artifactId>timefold-solver-model-maps-api</artifactId>
416+
<version>${version.ai.timefold.solver}</version>
417+
<classifier>sources</classifier>
418+
</dependency>
419+
<dependency>
420+
<groupId>ai.timefold.solver</groupId>
421+
<artifactId>timefold-solver-model-maps-service-integration</artifactId>
422+
<version>${version.ai.timefold.solver}</version>
423+
</dependency>
424+
<dependency>
425+
<groupId>ai.timefold.solver</groupId>
426+
<artifactId>timefold-solver-model-maps-service-integration</artifactId>
427+
<version>${version.ai.timefold.solver}</version>
428+
<classifier>sources</classifier>
429+
</dependency>
430+
<dependency>
431+
<groupId>ai.timefold.solver</groupId>
432+
<artifactId>timefold-solver-model-maps-service-client</artifactId>
433+
<version>${version.ai.timefold.solver}</version>
434+
</dependency>
435+
<dependency>
436+
<groupId>ai.timefold.solver</groupId>
437+
<artifactId>timefold-solver-model-maps-service-client</artifactId>
438+
<version>${version.ai.timefold.solver}</version>
439+
<classifier>sources</classifier>
440+
</dependency>
441+
<dependency>
442+
<groupId>ai.timefold.solver</groupId>
443+
<artifactId>timefold-solver-model-maps-service-rest</artifactId>
444+
<version>${version.ai.timefold.solver}</version>
445+
</dependency>
446+
<dependency>
447+
<groupId>ai.timefold.solver</groupId>
448+
<artifactId>timefold-solver-model-maps-service-rest</artifactId>
449+
<version>${version.ai.timefold.solver}</version>
450+
<classifier>sources</classifier>
451+
</dependency>
452+
<dependency>
453+
<groupId>ai.timefold.solver</groupId>
454+
<artifactId>timefold-solver-model-maps-service-test</artifactId>
455+
<version>${version.ai.timefold.solver}</version>
456+
</dependency>
457+
<dependency>
458+
<groupId>ai.timefold.solver</groupId>
459+
<artifactId>timefold-solver-model-maps-service-test</artifactId>
460+
<version>${version.ai.timefold.solver}</version>
461+
<classifier>sources</classifier>
462+
</dependency>
463+
<dependency>
464+
<groupId>ai.timefold.solver</groupId>
465+
<artifactId>timefold-solver-model-quarkus-integration-tests</artifactId>
466+
<version>${version.ai.timefold.solver}</version>
467+
</dependency>
468+
<dependency>
469+
<groupId>ai.timefold.solver</groupId>
470+
<artifactId>timefold-solver-model-quarkus-integration-tests</artifactId>
471+
<version>${version.ai.timefold.solver}</version>
472+
<classifier>sources</classifier>
473+
</dependency>
474+
<dependency>
475+
<groupId>ai.timefold.solver</groupId>
476+
<artifactId>timefold-solver-model-maps-haversine</artifactId>
477+
<version>${version.ai.timefold.solver}</version>
478+
</dependency>
479+
<dependency>
480+
<groupId>ai.timefold.solver</groupId>
481+
<artifactId>timefold-solver-model-maps-haversine</artifactId>
482+
<version>${version.ai.timefold.solver}</version>
483+
<classifier>sources</classifier>
484+
</dependency>
485+
486+
<dependency>
487+
<groupId>ai.timefold.solver</groupId>
488+
<artifactId>timefold-solver-model-defaults</artifactId>
489+
<version>${version.ai.timefold.solver}</version>
490+
</dependency>
491+
<dependency>
492+
<groupId>ai.timefold.solver</groupId>
493+
<artifactId>timefold-solver-model-defaults</artifactId>
494+
<version>${version.ai.timefold.solver}</version>
495+
<classifier>sources</classifier>
496+
</dependency>
497+
498+
<!-- test support -->
499+
<dependency>
500+
<groupId>ai.timefold.solver</groupId>
501+
<artifactId>timefold-solver-model-test</artifactId>
502+
<version>${version.ai.timefold.solver}</version>
503+
</dependency>
504+
<dependency>
505+
<groupId>ai.timefold.solver</groupId>
506+
<artifactId>timefold-solver-model-test</artifactId>
507+
<version>${version.ai.timefold.solver}</version>
508+
<classifier>sources</classifier>
509+
</dependency>
510+
511+
<!-- maven plugin -->
512+
<dependency>
513+
<groupId>ai.timefold.solver</groupId>
514+
<artifactId>timefold-maven-plugin</artifactId>
515+
<version>${version.ai.timefold.solver}</version>
516+
</dependency>
517+
<dependency>
518+
<groupId>ai.timefold.solver</groupId>
519+
<artifactId>timefold-maven-plugin</artifactId>
520+
<version>${version.ai.timefold.solver}</version>
521+
<classifier>sources</classifier>
522+
</dependency>
291523
</dependencies>
292524
</dependencyManagement>
293525

0 commit comments

Comments
 (0)