Skip to content

Commit c297b5a

Browse files
committed
Add info for 2025 Challenge
1 parent b8186d2 commit c297b5a

File tree

8 files changed

+1357
-3
lines changed

8 files changed

+1357
-3
lines changed
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
#------------------------------------------------------------------------------#
2+
# This file contains the setup for building a base image for the MiniZinc
3+
# challenges. It uses multi-stage builds in order to keep the images small.
4+
# Note that the statements ADD, RUN, and COPY can add image layers.
5+
#------------------------------------------------------------------------------#
6+
# The build image
7+
8+
# Setup Alpine Linux as build image
9+
FROM alpine:latest AS builder
10+
11+
#------------------------------------------------------------------------------#
12+
# Script for executing a FlatZinc or MiniZinc solver in the FD class
13+
14+
RUN mkdir /minizinc
15+
16+
RUN \
17+
echo "#!/bin/bash" > /minizinc/mzn-exec-fd && \
18+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-fd && \
19+
echo "# Script for running solver in the class 'FD search'" >> /minizinc/mzn-exec-fd && \
20+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-fd && \
21+
echo "# FlatZinc Solver" >> /minizinc/mzn-exec-fd && \
22+
echo "# (comment following line for MiniZinc solver)" >> /minizinc/mzn-exec-fd && \
23+
echo "minizinc --solver \"org.minizinc.mzn-fzn\" -k --fzn-cmd \"\$FZNEXEC\" -G exec \"\$@\"" >> /minizinc/mzn-exec-fd && \
24+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-fd && \
25+
echo "# MiniZinc Solver" >> /minizinc/mzn-exec-fd && \
26+
echo "# (add call to your solver here, e.g.)" >> /minizinc/mzn-exec-fd && \
27+
echo "# mzn-gecode -G gecode \"\$@\"" >> /minizinc/mzn-exec-fd && \
28+
chmod a+x /minizinc/mzn-exec-fd
29+
30+
#------------------------------------------------------------------------------#
31+
# Script for executing a FlatZinc or MiniZinc solver in the FREE class
32+
33+
RUN \
34+
echo "#!/bin/bash" > /minizinc/mzn-exec-free && \
35+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-free && \
36+
echo "# Script for running solver in the class 'FREE search'" >> /minizinc/mzn-exec-free && \
37+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-free && \
38+
echo "# FlatZinc Solver" >> /minizinc/mzn-exec-free && \
39+
echo "# (comment following line for MiniZinc solver)" >> /minizinc/mzn-exec-free && \
40+
echo "minizinc --solver \"org.minizinc.mzn-fzn\" -k --fzn-cmd \"\$FZNEXEC\" -f -G exec \"\$@\"" >> /minizinc/mzn-exec-free && \
41+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-free && \
42+
echo "# MiniZinc Solver" >> /minizinc/mzn-exec-free && \
43+
echo "# (add call to your solver here, e.g.)" >> /minizinc/mzn-exec-free && \
44+
echo "# mzn-gecode -f -G gecode \"\$@\"" >> /minizinc/mzn-exec-free && \
45+
chmod a+x /minizinc/mzn-exec-free
46+
47+
#------------------------------------------------------------------------------#
48+
# Script for executing a FlatZinc or MiniZinc solver in the PAR class
49+
# (NOTE that this script will be invoke including the parameter "-p <n>".)
50+
51+
RUN \
52+
echo "#!/bin/bash" > /minizinc/mzn-exec-par && \
53+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-par && \
54+
echo "# Script for running solver in the class 'PAR search'" >> /minizinc/mzn-exec-par && \
55+
echo "# NOTE that the argument \"-p <n>\" will passed to this script!" >> /minizinc/mzn-exec-par && \
56+
echo "# Your solver needs to handle this parameter." >> /minizinc/mzn-exec-par && \
57+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-par && \
58+
echo "# FlatZinc Solver" >> /minizinc/mzn-exec-par && \
59+
echo "# (comment following line for MiniZinc solver)" >> /minizinc/mzn-exec-par && \
60+
echo "minizinc --solver \"org.minizinc.mzn-fzn\" -k --fzn-cmd \"\$FZNEXEC\" -G exec \"\$@\"" >> /minizinc/mzn-exec-par && \
61+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-par && \
62+
echo "# MiniZinc Solver" >> /minizinc/mzn-exec-par && \
63+
echo "# (add call to your solver here, e.g.)" >> /minizinc/mzn-exec-par && \
64+
echo "# mzn-gecode -G gecode \"\$@\"" >> /minizinc/mzn-exec-par && \
65+
chmod a+x /minizinc/mzn-exec-par
66+
67+
#------------------------------------------------------------------------------#
68+
# Script for executing a FlatZinc or MiniZinc solver
69+
70+
RUN \
71+
echo "#!/bin/bash" > /minizinc/solver && \
72+
echo "#------------------------------------------#" >> /minizinc/solver && \
73+
echo "EXEC=mzn-exec-fd " >> /minizinc/solver && \
74+
echo "while (( \"\$#\" )) " >> /minizinc/solver && \
75+
echo "do " >> /minizinc/solver && \
76+
echo " case \$1 in " >> /minizinc/solver && \
77+
echo " -p) " >> /minizinc/solver && \
78+
echo " EXEC=mzn-exec-par " >> /minizinc/solver && \
79+
echo " ARGS=\"\$ARGS \$1\" " >> /minizinc/solver && \
80+
echo " ;; " >> /minizinc/solver && \
81+
echo " -f|--free-search) " >> /minizinc/solver && \
82+
echo " EXEC=mzn-exec-free " >> /minizinc/solver && \
83+
echo " ;; " >> /minizinc/solver && \
84+
echo " --fzn-flag|--fzn-flags) " >> /minizinc/solver && \
85+
echo " shift " >> /minizinc/solver && \
86+
echo " FLAGS=\"\$FLAGS \$1\" " >> /minizinc/solver && \
87+
echo " ;; " >> /minizinc/solver && \
88+
echo " -D|--cmdline-data) " >> /minizinc/solver && \
89+
echo " shift " >> /minizinc/solver && \
90+
echo " DATA=\"\$DATA \$1\" " >> /minizinc/solver && \
91+
echo " ;; " >> /minizinc/solver && \
92+
echo " *) " >> /minizinc/solver && \
93+
echo " ARGS=\"\$ARGS \$1\" " >> /minizinc/solver && \
94+
echo " ;; " >> /minizinc/solver && \
95+
echo " esac " >> /minizinc/solver && \
96+
echo " shift " >> /minizinc/solver && \
97+
echo "done " >> /minizinc/solver && \
98+
echo "if [ -z \"\$FLAGS\" ] && [ -z \"\$DATA\" ] " >> /minizinc/solver && \
99+
echo "then " >> /minizinc/solver && \
100+
echo " \$EXEC \$ARGS " >> /minizinc/solver && \
101+
echo "elif [ -n \"\$FLAGS\" ] && [ -z \"\$DATA\" ]" >> /minizinc/solver && \
102+
echo "then " >> /minizinc/solver && \
103+
echo " \$EXEC --fzn-flags \"\$FLAGS\" \$ARGS " >> /minizinc/solver && \
104+
echo "elif [ -z \"\$FLAGS\" ] && [ -n \"\$DATA\" ]" >> /minizinc/solver && \
105+
echo "then " >> /minizinc/solver && \
106+
echo " \$EXEC -D \"\$DATA\" \$ARGS " >> /minizinc/solver && \
107+
echo "else " >> /minizinc/solver && \
108+
echo " \$EXEC --fzn-flags \"\$FLAGS\" -D \"\$DATA\" \$ARGS " >> /minizinc/solver && \
109+
echo "fi " >> /minizinc/solver && \
110+
chmod a+x /minizinc/solver
111+
112+
#------------------------------------------------------------------------------#
113+
# Default solver configuration file
114+
RUN \
115+
mkdir -p /.minizinc/solvers && \
116+
echo '{' > /.minizinc/solvers/challenge.msc && \
117+
echo ' "executable": "/minizinc/solver",' >> /.minizinc/solvers/challenge.msc && \
118+
echo ' "id": "org.minizinc.mznc",' >> /.minizinc/solvers/challenge.msc && \
119+
echo ' "isGUIApplication": false,' >> /.minizinc/solvers/challenge.msc && \
120+
echo ' "mznlib": "",' >> /.minizinc/solvers/challenge.msc && \
121+
echo ' "name": "MiniZinc Challenge Solver",' >> /.minizinc/solvers/challenge.msc && \
122+
echo ' "needsSolns2Out": false,' >> /.minizinc/solvers/challenge.msc && \
123+
echo ' "stdFlags": ["-a", "-p", "-f", "-v", "-t"],' >> /.minizinc/solvers/challenge.msc && \
124+
echo ' "extraFlags": [' >> /.minizinc/solvers/challenge.msc && \
125+
echo ' ["--output-mode", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
126+
echo ' ["--output-objective", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
127+
echo ' ["--verbose", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
128+
echo ' ["-c", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
129+
echo ' ["--compile", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
130+
echo ' ["--output-fzn-to-stdout", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
131+
echo ' ["--output-ozn-to-stdout", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
132+
echo ' ["-o", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
133+
echo ' ["--free-search", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
134+
echo ' ["--fzn", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
135+
echo ' ["--output-to-file", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
136+
echo ' ["--output-fzn-to-file", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
137+
echo ' ["--ozn", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
138+
echo ' ["--output-ozn-to-file", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
139+
echo ' ["--output-objective", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
140+
echo ' ["--parallel", "", "string", ""]' >> /.minizinc/solvers/challenge.msc && \
141+
echo ' ],' >> /.minizinc/solvers/challenge.msc && \
142+
echo ' "supportsMzn": true,' >> /.minizinc/solvers/challenge.msc && \
143+
echo ' "version": "1.0.0"' >> /.minizinc/solvers/challenge.msc && \
144+
echo '}' >> /.minizinc/solvers/challenge.msc && \
145+
echo '{"tagDefaults": [["", "org.minizinc.mznc"]]}' > /.minizinc/Preferences.json
146+
147+
#------------------------------------------------------------------------------#
148+
# Entry class parameter configuration files
149+
RUN \
150+
echo '{' > /minizinc/base.mpc && \
151+
echo ' "output-mode": "dzn",' >> /minizinc/base.mpc && \
152+
echo ' "output-objective": true,' >> /minizinc/base.mpc && \
153+
echo ' "intermediate": true' >> /minizinc/base.mpc && \
154+
echo '}' >> /minizinc/base.mpc && \
155+
echo '{' > /minizinc/fd.mpc && \
156+
echo ' "param-file": "base.mpc"' >> /minizinc/fd.mpc && \
157+
echo '}' >> /minizinc/fd.mpc && \
158+
echo '{' > /minizinc/free.mpc && \
159+
echo ' "param-file": "base.mpc",' >> /minizinc/free.mpc && \
160+
echo ' "free-search": true' >> /minizinc/free.mpc && \
161+
echo '}' >> /minizinc/free.mpc && \
162+
echo '{' > /minizinc/par.mpc && \
163+
echo ' "param-file": "base.mpc",' >> /minizinc/par.mpc && \
164+
echo ' "parallel": 4' >> /minizinc/par.mpc && \
165+
echo '}' >> /minizinc/par.mpc
166+
167+
#------------------------------------------------------------------------------#
168+
# Adding MiniZinc test files
169+
170+
RUN \
171+
echo "int: a;" > /minizinc/test.mzn && \
172+
echo "var 1..100: x;" >> /minizinc/test.mzn && \
173+
echo "constraint a <= x /\ x < 2*a; " >> /minizinc/test.mzn && \
174+
echo "solve :: int_search([x], input_order, indomain_min, complete)" >> /minizinc/test.mzn && \
175+
echo " maximize x;" >> /minizinc/test.mzn && \
176+
echo "a = 2;" > /minizinc/2.dzn
177+
178+
#------------------------------------------------------------------------------#
179+
# Setup of the base image
180+
181+
# Get base image with Ubuntu 24.04
182+
FROM minizinc/minizinc:2.9.0-latest
183+
184+
# Copy unpacked MiniZinc installation from the build image
185+
COPY --from=builder /minizinc /minizinc
186+
COPY --from=builder /.minizinc /root/.minizinc
187+
188+
# Create folder for the solver submission, link solver MiniZinc library,
189+
# remove bundled solver configuration files
190+
RUN mkdir /entry_data \
191+
&& mkdir /entry_data/mzn-lib \
192+
&& ln -s /entry_data/mzn-lib /usr/local/share/minizinc/exec \
193+
&& rm /usr/local/share/minizinc/solvers/*.msc
194+
195+
#------------------------------------------------------------------------------#
196+
# Environment Variables
197+
198+
# Add FlatZinc solver absolute path
199+
ENV FZNEXEC="/entry_data/fzn-exec"
200+
201+
# Add MiniZinc's binary path to PATH
202+
ENV PATH="/minizinc:${PATH}"
203+
204+
#------------------------------------------------------------------------------#
205+
# Setup Working Directory
206+
207+
WORKDIR /minizinc
208+

src/components/AnnouncementBanner.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import { Container } from '@/components/Container'
22
import { faAward } from '@fortawesome/free-solid-svg-icons'
33
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
44
import { Link } from '@/components/Link'
5-
import { resultsAnnouncement } from '@/data/challenge/banners'
5+
import { problemCall } from '@/data/challenge/banners'
66

77
import clsx from 'clsx'
88

99
export function AnnouncementBanner({ className, ...props }) {
10-
const announcement = resultsAnnouncement
10+
const announcement = problemCall
1111
return (
1212
<section
1313
id="announcement-banner"

src/data/challenge/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@ export const globals = ((problems) => {
5252
/**
5353
* The current MiniZinc Challenge year
5454
*/
55-
export const current = 2024
55+
export const current = 2025

src/data/challenge/info.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,41 @@
11
import { Link } from '@/components/Link'
22

33
export const info = {
4+
2025: (() => {
5+
const problemSubmissionDeadline = 'Fri, 16 May 2025'
6+
return {
7+
announcements: [
8+
<>
9+
<strong>2025-02-11</strong> Official{' '}
10+
<Link href="/challenge/2025/call_for_problems">
11+
Call for Problems
12+
</Link>{' '}
13+
for the MiniZinc Challenge.
14+
</>,
15+
],
16+
problemSubmissionDeadline,
17+
minizinc: '2.9.0',
18+
dates: [
19+
<>
20+
Registration opens: <strong>Now</strong>.
21+
</>,
22+
<>
23+
Problem submission deadline: <strong>{problemSubmissionDeadline}</strong>.
24+
</>,
25+
<>
26+
Solver submission begins: <strong>Mon, 26 May 2025</strong>.
27+
</>,
28+
<>
29+
Solver submission deadline: <strong>Fri, 11 July 2025</strong>.
30+
</>,
31+
<>
32+
Announcement of results at{' '}
33+
<Link href="https://cp2025.a4cp.org/">CP2025</Link>:{' '}
34+
<strong>10 - 15 August 2025</strong> (Glasgow, Scotland).
35+
</>,
36+
],
37+
}
38+
})(),
439
2024: (() => {
540
const problemSubmissionDeadline = 'Fri, 28 June 2024'
641
return {
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import { info } from '@/data/challenge/info'
2+
import { Container } from '@/components/Container'
3+
import { Footer } from '@/components/Footer'
4+
import { Link } from '@/components/Link'
5+
import { Header } from '@/components/Header'
6+
import { Breadcrumbs } from '@/components/Breadcrumbs'
7+
import Head from 'next/head'
8+
export const year = 2025
9+
export const challenge = info[year]
10+
11+
## Call for Problem Submission for the MiniZinc Challenge {year}
12+
13+
<Breadcrumbs
14+
className="not-prose"
15+
items={[
16+
['MiniZinc Challenge', '/challenge'],
17+
[`Challenge ${year}`, `/challenge/${year}`],
18+
'Call for problems',
19+
]}
20+
/>
21+
22+
The MiniZinc Challenge is an annual solver competition in the Constraint Programming (CP) community
23+
held before the International Conference on Principles and Practice of Constraint Programming.
24+
The MiniZinc Challenge {year} is seeking interesting problem sets on which various constraint solving
25+
technologies should be compared on this year. Everyone is allowed to submit problems regardless of
26+
whether they are an entrant in the challenge.
27+
28+
### Important dates and deadlines:
29+
30+
- Problem submission open: **now**
31+
- Problem submission deadline: **{challenge.problemSubmissionDeadline}**
32+
33+
### Problem submission
34+
35+
- Send an email to `challenge` [at] `minizinc.dev` and attach an archive containing your problem.
36+
37+
There are no restrictions on the kind of problems, but ideally they should be of interesting nature
38+
such as practice-related problems and puzzles etc. Problem submissions with real-world instances are
39+
particularly welcome. We may need to make some modifications to submitted models to ensure they
40+
are in a format suitable for the challenge.
41+
42+
The problem submitter should provide a MiniZinc model of the problem and at least 20 instances ranging
43+
from easy-to-solve to hard-to-solve for an “ordinary” CP system. In addition, there should be at
44+
least one "toy" instance for testing purposes. It is strongly encouraged to make use of the global
45+
constraint definitions provided in the MiniZinc {challenge.minizinc} distribution. If you have an instance generator,
46+
we are more than happy to receive it.
47+
48+
The submitted problem must be placed under the
49+
[MIT licence](https://opensource.org/licenses/MIT), and each model and data file must begin with a
50+
comment which includes the licence. If you are unable to use this licence, please let us know so
51+
we can arrange an alternative.
52+
53+
Please follow the links below for submission instructions and requirements.
54+
55+
<Link href={`/challenge/${year}`}>{`www.minizinc.org/challenge/${year}`}</Link>
56+
<br />
57+
<Link href={`/challenge/${year}/rules`}>
58+
{`www.minizinc.org/challenge/${year}/rules`}
59+
</Link>
60+
61+
export default function Page({ children }) {
62+
return (
63+
<>
64+
<Head>
65+
<title>{`MiniZinc - Challenge ${year} Call for Problems`}</title>
66+
</Head>
67+
<Header />
68+
<main>
69+
<Container>
70+
<article className="prose prose-minizinc max-w-none py-6">
71+
{children}
72+
</article>
73+
</Container>
74+
</main>
75+
<Footer />
76+
</>
77+
)
78+
}

0 commit comments

Comments
 (0)