在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:Wikunia/ConstraintSolver.jl开源软件地址:https://github.com/Wikunia/ConstraintSolver.jl开源编程语言:Julia 97.0%开源软件介绍:ConstraintSolver.jlThis package aims to be a constraint solver completely written in Julia. The concepts are more or less fully described on my blog OpenSourc.es. There is of course also the general user manual here which explains how to solve your model. Goals
InstallationYou can install this julia package using
ExampleYou can easily use this package with the same modeling package as you might be used to for solving (non)linear problems in Julia: JuMP.jl. Sudokuusing JuMP
grid = [6 0 2 0 5 0 0 0 0;
0 0 0 0 0 3 0 4 0;
0 0 0 0 0 0 0 0 0;
4 3 0 0 0 8 0 0 0;
0 1 0 0 0 0 2 0 0;
0 0 0 0 0 0 7 0 0;
5 0 0 2 7 0 0 0 0;
0 0 0 0 0 0 0 8 1;
0 0 0 6 0 0 0 0 0]
using ConstraintSolver
# define a shorter name ;)
const CS = ConstraintSolver
# creating a constraint solver model and setting ConstraintSolver as the optimizer.
m = Model(CS.Optimizer)
# define the 81 variables
@variable(m, 1 <= x[1:9,1:9] <= 9, Int)
# set variables if fixed
for r=1:9, c=1:9
if grid[r,c] != 0
@constraint(m, x[r,c] == grid[r,c])
end
end
for rc = 1:9
@constraint(m, x[rc,:] in CS.AllDifferent())
@constraint(m, x[:,rc] in CS.AllDifferent())
end
for br=0:2
for bc=0:2
@constraint(m, vec(x[br*3+1:(br+1)*3,bc*3+1:(bc+1)*3]) in CS.AllDifferent())
end
end
optimize!(m)
# retrieve grid
grid = convert.(Int, JuMP.value.(x)) Supported variables and constraintsYou can see a list of currently supported constraints in the docs. In general the solver works only with bounded discrete variables and supports these constraints
ExamplesA list of example problems can be found on the website by Håkan Kjellerstrand. Blog postsIf you're interested in how the solver works you can checkout my blog opensourc.es. There are currently around 30 blog posts about the constraint solver and a new one is added about once per month. NoticeI'm a MSc student in computer science so I don't have much knowledge on how constraint programming works but I'm keen to find out ;) SupportIf you find a bug or improvement please open an issue or make a pull request. Additionally if you use the solver regularly or are interested in further development please checkout my Patreon page or click on the support button at the top of this website. ;) |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论