Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
173 commits
Select commit Hold shift + click to select a range
fc017b1
remove DataStructures from dependencies (#240)
matbesancon Aug 2, 2025
c9b9c7f
Adding the settings dict for the smoothing mode.
dhendryc Aug 5, 2025
bd3a947
Clean smoothing settings description.
dhendryc Aug 5, 2025
5ff4490
Parameter mode is optional and per default DEFAULT_MODE.
dhendryc Aug 5, 2025
47c0975
Add the smoothing parameters to the solve interface.
dhendryc Aug 5, 2025
778ae85
Run Frank-Wolfe with the smoothed objective and gradient.
dhendryc Aug 5, 2025
d3a42b2
Evaluate incumbent solution with the original objective.
dhendryc Aug 5, 2025
31d51a7
Add warning.
dhendryc Aug 5, 2025
32e92e5
Syntax fix.
dhendryc Aug 6, 2025
8ddab99
Stop test suite if an error occures.
dhendryc Aug 6, 2025
d556fc9
Add Suppressor.jl to the tests (#246)
dhendryc Aug 6, 2025
9059f17
Renaming the smoothing parameters.
dhendryc Aug 6, 2025
0eda320
Naming change.
dhendryc Aug 6, 2025
063b09f
Minor change.
dhendryc Aug 6, 2025
2ffa1fe
Add debug statement.
dhendryc Aug 6, 2025
ff3a3b1
Remove unnecessary file.
dhendryc Aug 6, 2025
e376202
E-Optimal test script.
dhendryc Aug 7, 2025
514d3f8
Branch callback (#245)
dhendryc Aug 20, 2025
7ad5912
Bump actions/checkout from 4 to 5 (#248)
dependabot[bot] Aug 20, 2025
91b449e
Return both the status enum and the status string. (#247)
dhendryc Aug 20, 2025
28af10c
Show statement.
dhendryc Aug 22, 2025
80c4380
Remove show statement.
dhendryc Aug 22, 2025
2a8d71b
In case of small time limit the tree might be pruned after the first …
dhendryc Aug 22, 2025
f5d0631
Minor fix.
dhendryc Aug 22, 2025
d58a511
Also return solution source.
dhendryc Aug 27, 2025
887af19
Debug print statement.
dhendryc Aug 27, 2025
0bfc430
More prints.
dhendryc Aug 27, 2025
20833c5
Minor change.
dhendryc Aug 27, 2025
abf4001
Remove show statements.
dhendryc Aug 27, 2025
d1a8866
Another print statement.
dhendryc Aug 27, 2025
cbaa301
Add fix.
dhendryc Aug 27, 2025
fbf1107
minor fix.
dhendryc Aug 27, 2025
645eb12
Some more prints.
dhendryc Aug 27, 2025
17c49c2
Some more prints.
dhendryc Aug 27, 2025
8670cd4
Some more prints.
dhendryc Aug 27, 2025
c1891d1
Use Boscia solve status.
dhendryc Aug 27, 2025
8e5b3e7
Remove print statements.
dhendryc Aug 27, 2025
d569f0b
Dual gap based on subgradients in smoothing mode.
dhendryc Sep 2, 2025
3d19d50
Small debug statements.
dhendryc Sep 2, 2025
2e01190
More debug.
dhendryc Sep 2, 2025
229a81d
Even more debug.
dhendryc Sep 2, 2025
5a93be7
More debug.
dhendryc Sep 2, 2025
888741f
More and more debug.
dhendryc Sep 2, 2025
a73d27c
Delete debug statement.
dhendryc Sep 2, 2025
8bae35a
Interface change (#249)
dhendryc Sep 15, 2025
a3be1d9
Bump up SCIP version to 0.12
dhendryc Oct 21, 2025
e179194
CompatHelper: bump compat for FrankWolfe to 0.6, (keep existing compa…
github-actions[bot] Oct 21, 2025
1933718
Add windows os to the CI tests. (#259)
dhendryc Oct 21, 2025
4f04886
Bump version from 0.2.0 to 0.2.1
dhendryc Oct 22, 2025
0a00e0e
Add float tolerance for equality checks and a test (#252)
LJS42 Oct 30, 2025
eae06c8
Ignore generated markdowns generating from examples.
dhendryc Nov 5, 2025
18fb9cf
Fix scaling issue in the gradient. (#264)
dhendryc Nov 5, 2025
ce65578
added paper (#265)
matbesancon Nov 6, 2025
fd403a6
Only reference the main branch for CI badge. (#262)
dhendryc Nov 6, 2025
15d0123
Documentation examples (#251)
dhendryc Nov 11, 2025
dde557c
delete temp file.
dhendryc Nov 12, 2025
8e4c53c
New release.
dhendryc Nov 12, 2025
61e98a6
We can remove the Hungarian package as dependency as the BirkhoffLMO …
dhendryc Nov 12, 2025
519048e
fix Boscia dep on Hungarian (#267)
matbesancon Nov 26, 2025
ae5c2ea
Bump version from 0.2.2 to 0.2.3
matbesancon Nov 26, 2025
e64b2fb
Fix no status issue. (#270)
dhendryc Dec 15, 2025
29724b3
Bump actions/cache from 4 to 5 (#272)
dependabot[bot] Dec 17, 2025
4eedf64
Pairwise (#255)
LJS42 Dec 17, 2025
e33e60f
Callbackfix (#256)
LJS42 Dec 17, 2025
0d3d11e
Ci status badge (#273)
dhendryc Dec 18, 2025
3566a88
Bump actions/checkout from 5 to 6 (#266)
dependabot[bot] Dec 18, 2025
c81631c
Bump version from 0.2.3 to 0.2.4
dhendryc Dec 18, 2025
ce25162
Fix Bonobo to 0.1.4
dhendryc Jan 7, 2026
ef0482d
Delete temp file.
dhendryc Jan 8, 2026
a7178a6
Bonoboupdate (#279)
LJS42 Jan 14, 2026
db01086
Bump version from 0.2.4 to 0.2.5
dhendryc Jan 14, 2026
ff8457d
Merge main and fix merge conflicts.
dhendryc Jan 14, 2026
6b88d64
Missed merged conflicts.
dhendryc Jan 14, 2026
e6eaaa8
Bind in smoothing dict.
dhendryc Jan 15, 2026
cbfe95f
minor change.
dhendryc Jan 15, 2026
da06b5f
Minor fix in smoothing dict definition.
dhendryc Jan 15, 2026
03c09f3
Minor fix.
dhendryc Jan 15, 2026
7455b6e
Reassign the objective and gradient in the smoothing mode.
dhendryc Jan 15, 2026
09be0a0
Minor fix.
dhendryc Jan 15, 2026
04aca89
Debug statement.
dhendryc Jan 15, 2026
dd8a136
Remove debug statement.
dhendryc Jan 15, 2026
2457872
Add more informative assert message.
dhendryc Jan 15, 2026
2d0eb27
Minor fix.
dhendryc Jan 15, 2026
5ad3ca4
flag for using sub gradient information.
dhendryc Feb 9, 2026
c687de3
Use dual gap from the subgradient.
dhendryc Feb 10, 2026
b529379
New branching strategy.
dhendryc Feb 11, 2026
4248968
Use sub gradient information in tightening.
dhendryc Feb 11, 2026
3c49a72
minor fix.
dhendryc Feb 11, 2026
bf6ba89
more informative assert statement.
dhendryc Feb 11, 2026
6ffe6ac
More info.
dhendryc Feb 11, 2026
3428c3c
minor fix.
dhendryc Feb 11, 2026
878b4bd
Some print outs for debugging.
dhendryc Feb 11, 2026
f2c3089
More prints.
dhendryc Feb 11, 2026
92bd608
E-Optimal design example.
dhendryc Feb 11, 2026
51d2cc1
Minor fix.
dhendryc Feb 11, 2026
6ae65a8
minor changes.
dhendryc Feb 11, 2026
dbda822
Remove print statements.
dhendryc Feb 11, 2026
c67e7a8
Remove print.
dhendryc Feb 11, 2026
cc0e859
More dedbug statements.
dhendryc Feb 12, 2026
6da8faf
Minor change.
dhendryc Feb 12, 2026
808791e
Minor change.
dhendryc Feb 12, 2026
8fa0c01
Small debug statement.
dhendryc Feb 12, 2026
5e09ed0
Control print iter of FW from the settings.
dhendryc Feb 12, 2026
aeafcf6
Some print outs for the active and shadow set.
dhendryc Feb 12, 2026
d5bb0e6
Minor change.
dhendryc Feb 12, 2026
bfdf3b0
Adapt discarded vertices splitting for BRANCH_ALL.
dhendryc Feb 12, 2026
5cdd9b4
Minor change.
dhendryc Feb 12, 2026
1a60f8c
Minor fix.
dhendryc Feb 12, 2026
dfb0dbc
Minor change.
dhendryc Feb 12, 2026
c17f832
minor fix.
dhendryc Feb 12, 2026
7ac88f3
Removed print statement.+
dhendryc Feb 12, 2026
7a964f5
added bounded LMO interface for Hypersimplex (#284)
matbesancon Feb 12, 2026
74fd552
Bump version from 0.2.5 to 0.2.6
matbesancon Feb 13, 2026
ab22ecf
added is_simple_linear_feasible (#285)
matbesancon Feb 13, 2026
9c64157
Bump version from 0.2.6 to 0.2.7
matbesancon Feb 13, 2026
4050571
Add tests to hypersimplex and fix assert
matbesancon Feb 16, 2026
7e7d84f
Bump version from 0.2.7 to 0.2.8
matbesancon Feb 16, 2026
cb28675
Minor fix.
dhendryc Feb 18, 2026
aea9098
Restart FW in smoothing mode to verify integer optimum at node.
dhendryc Feb 18, 2026
e908d24
Exclusion criterion.
dhendryc Feb 18, 2026
7be360c
Control max fw iter of the restart separately.
dhendryc Feb 19, 2026
53b95c7
Minor change.
dhendryc Feb 19, 2026
3543ebe
Add absolute gap to the output statistics.
dhendryc Feb 20, 2026
034460b
Info for tightening smoothing for verify integer solution only in deb…
dhendryc Feb 20, 2026
4ee186a
more context in assert message.
dhendryc Feb 22, 2026
a296f2b
Choose primal solution based on the actual objective.
dhendryc Feb 22, 2026
153a034
Minor changes.
dhendryc Feb 24, 2026
83799ca
Testing the dictionary creation (#287)
dhendryc Mar 4, 2026
cd4ca05
Bump version from 0.2.8 to 0.2.9
dhendryc Mar 4, 2026
181e1ff
float tolerance on is_simple_linear_feasible for hypersimplex (#289)
matbesancon Mar 10, 2026
b176ff4
Bump version from 0.2.9 to 0.2.10
matbesancon Mar 10, 2026
b7c8911
added integral_objective setting (#288)
WenjieXiao-2022 Mar 10, 2026
c115714
Merge branch 'main' into smoothing-mode
dhendryc Mar 11, 2026
203285f
We should branch on a fractional variable.
dhendryc Mar 11, 2026
8a3f4e3
Make changes variable for testing performance.
dhendryc Mar 25, 2026
86a0f0b
Adapt to syntax.
dhendryc Mar 25, 2026
979cf9d
Only overwrite active set if we are searching for the best sol with r…
dhendryc Mar 25, 2026
54cc2fd
Correction.
dhendryc Mar 27, 2026
8b629d0
Add safety check.
dhendryc Mar 27, 2026
887b3e5
Add changes from the experiments.
dhendryc Mar 27, 2026
4d769df
There is a version in the example folder.
dhendryc Mar 27, 2026
5d2fac8
minor.
dhendryc Mar 27, 2026
df2967a
Choose best lower bound.
dhendryc Mar 28, 2026
3c89bb4
For smoothed objective also provide the fw tolerance.
dhendryc Apr 14, 2026
5493640
Add message to assert.
dhendryc Apr 14, 2026
1ed007d
make the smoothing aware of the node level.
dhendryc Apr 14, 2026
8e7463c
Minor change.
dhendryc Apr 14, 2026
7da0cf1
In rerun clip to minimal allowed mu.
dhendryc Apr 14, 2026
3ade6e5
minor check.
dhendryc Apr 15, 2026
bdb59f6
Minor change.
dhendryc Apr 15, 2026
bf8234a
add BDICG (#282)
WenjieXiao-2022 Apr 29, 2026
471f95a
Add depth first traverse (#274)
WenjieXiao-2022 Apr 30, 2026
a9f9e93
Avoid duplicate LMO from Frank-Wolfe (#293)
dhendryc Apr 30, 2026
15bcfff
Bump version from 0.2.10 to 0.2.11
dhendryc Apr 30, 2026
b0c216f
Check that neither the primal nor dual gap become infinite during the…
dhendryc May 7, 2026
fc52725
Add callback at node level for the smoothing.
dhendryc May 7, 2026
0578d80
reorder the sloving_stage check (#294)
WenjieXiao-2022 May 11, 2026
e0acb6b
Bump version from 0.2.11 to 0.2.12
dhendryc May 11, 2026
ce1c84f
print the source of solution (#295)
WenjieXiao-2022 May 12, 2026
5a5b48d
add in-face LMO time tracking (#296)
WenjieXiao-2022 May 12, 2026
ce43613
Node callback is only interesting in the smoothing case.
dhendryc May 15, 2026
22531ca
Node callback needs the smoothing parameter.
dhendryc May 15, 2026
1a61e61
If dual gap is infinite, try using the sub grad info.
dhendryc May 15, 2026
c94c53b
Print out.
dhendryc May 15, 2026
643dc4c
Minor change.
dhendryc May 15, 2026
f8348a4
Bump codecov/codecov-action from 5 to 6 (#290)
dependabot[bot] May 27, 2026
fdd8e95
Add helper print outs.
dhendryc Jun 1, 2026
4fccca2
Clearer debug print outs.
dhendryc Jun 1, 2026
01b1b62
Merge changes.
dhendryc Jun 1, 2026
34aee6a
Rename internal fw callback for clear differentiation.
dhendryc Aug 18, 2026
0ffcfc2
User frank wolfe callback.
dhendryc Aug 18, 2026
7475d6c
Remove debugging, now done via user callback.
dhendryc Aug 18, 2026
aafb042
Do not let the custom fw callback override the normal one.
dhendryc Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: CI
on:
push:
branches: [master]
branches: [main]
pull_request:
types: [opened, synchronize, reopened]
jobs:
Expand All @@ -21,13 +21,16 @@ jobs:
- version: '1'
os: macOS-latest
arch: x64
- version: '1'
os: windows-latest
arch: x64
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.version }}
arch: ${{ matrix.arch }}
- uses: actions/cache@v4
- uses: actions/cache@v5
env:
cache-name: cache-artifacts
with:
Expand All @@ -40,6 +43,6 @@ jobs:
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
- uses: julia-actions/julia-processcoverage@v1
- uses: codecov/codecov-action@v5
- uses: codecov/codecov-action@v6
with:
file: lcov.info
files: lcov.info
4 changes: 3 additions & 1 deletion .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ on:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: julia-actions/setup-julia@latest
with:
# Build documentation on Julia 1.6
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/format_check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
- uses: julia-actions/setup-julia@latest
with:
version: '1'
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Format check
shell: julia --color=yes {0}
run: |
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,6 @@ docs/src/index.md
julia

.vscode

docs/src/examples/*.md
docs/src/examples/*.jl
23 changes: 17 additions & 6 deletions CITATION.bib
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
@article{miconvexfw,
doi = {10.48550/ARXIV.2208.11010},
url = {https://arxiv.org/abs/2208.11010},
author = {Hendrych, Deborah and Troppens, Hannah and Besançon, Mathieu and Pokutta, Sebastian},
title = {Convex integer optimization with Frank-Wolfe methods},
year = {2022}
@article{convexmip,
title={Convex mixed-integer optimization with {Frank-Wolfe} algorithms},
year={2025},
archivePrefix={arXiv},
eprint={2208.11010},
author={Hendrych, Deborah and Troppens, Hannah and Besançon, Mathieu and Pokutta, Sebastian},
journal={Mathematical Programming Computation}
}

@article{xiao2025bosciajlreviewtutorial,
title={{Boscia.jl}: a review and tutorial},
author={Wenjie Xiao and Deborah Hendrych and Mathieu Besançon and Sebastian Pokutta},
year={2025},
eprint={2511.01479},
archivePrefix={arXiv},
primaryClass={math.OC},
url={https://arxiv.org/abs/2511.01479},
}
96 changes: 96 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Contributing to FrankWolfe

First, thanks for taking the time to contribute.
Contributions in any form, such as documentation, bug fix, examples or algorithmic improvement and extensions, are appreciated and welcome.

We list below some guidelines to help you contribute to the package.

## Community Standards

Interactions on this repository must follow the Julia [Community Standards](https://julialang.org/community/standards/) including Pull Requests and issues.

## Where can I get an overview?

Check out the [paper](https://arxiv.org/abs/2208.11010) presenting the package
for a high-level overview of the feature and algorithms, the [tutorial paper](https://arxiv.org/abs/2511.01479), which
gives a more high-level overview and some example applications, and
the [documentation](https://zib-iol.github.io/Boscia.jl/dev/) for more details.

## I just have a question

If your question is related to Julia, its syntax or tooling, the best places to get help will be tied to the Julia community,
see [the Julia community page](https://julialang.org/community/) for a number of communication channels (Slack, Zulip, and Discourse being the most active).

For now, the best way to ask a question is to file an issue or reach out to [Mathieu Besançon](https://github/matbesancon),
[Deborah Hendrych](https://github.com/dhendryc) or [Sebastian Pokutta](https://github.com/pokutta).
You can also ask your question on [discourse.julialang.org](https://discourse.julialang.org) in the optimization topic or on the Julia Slack
on `#mathematical-optimization`, see [the Julia community page](https://julialang.org/community/) to gain access.

## How can I file an issue?

If you found a bug or want to propose a feature, we track our issues within the [GitHub repository](https://github.com/ZIB-IOL/Boscia.jl/issues).
Once opened, you can edit the issue or add new comments to continue the conversation.

If you encounter a bug, send the stack trace (the lines appearing after the error occurred containing some source files)
and ideally a Minimal Working Example (MWE), a small program that reproduces the bug.

## How can I contribute

Contributing to the repository will likely be made in a Pull Request (PR).
You will need to:
1. Fork the repository
2. Clone it on your machine to perform the changes
3. Create a branch for your modifications, based on the branch you want to merge on (typically main)
4. Push to this branch on your fork
5. The GitHub web interface will then automatically suggest opening a PR onto the original repository.

See the GitHub [guide to creating PRs](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) for more help on workflows using Git and GitHub.

A PR should do a single thing to reduce the amount of code that must be reviewed.
Do not run the formatter on the whole repository except if your PR is specifically about formatting.

### Improve the documentation

The documentation can be improved by changing the files in `docs/src`,
for example to add a section in the documentation, expand a paragraph or add a plot.
The documentation attached to a given type of function can be modified in the source files directly, it appears above the function / type / thingy you try to document
with three double quotation marks like this:
```julia
"""
This explains what the function `f` does, it supports markdown.
"""
function f(x)
# ...
end
```

### Provide a new example or test

If you fix a bug, one would typically expect to add a test that validates that the bug is gone.
A test would be added in a file in the `test/` folder, for which the entry point is `runtests.jl`.

The `examples/` folder features several examples covering different problem settings and algorithms.
The examples are expected to run with the same environment and dependencies as the tests using
[TestEnv](https://github.com/JuliaTesting/TestEnv.jl).
If the example is lightweight enough, it can be added to the `docs/src/examples/` folder which generates
pages for the documentation based on Literate.jl.

### Provide a new feature

Contributions bringing new features are also welcome.
If the feature is likely to impact performance, some benchmarks should be run with `BenchmarkTools` on several
of the examples to assert the effect at different problem sizes.
If the feature should only be active in some cases, a keyword should be added to one of the settings dictionaries or
be linked to a specific mode.

Some typical features to implement are:
1. A new Linear Minimization Oracle (LMO) - if this requires additional (big) package imports, please consider adding the LMO to [CombinatorialLinearOracles.jl](https://github.com/ZIB-IOL/CombinatorialLinearOracles.jl) instead.
2. A new heuristic - for examples, see `src/heuristics.jl`.
3. A new branching or traverse strategy.

### Code style

We try to follow the [Julia documentation guidelines](https://docs.julialang.org/en/v1/manual/documentation/).
We run [`JuliaFormatter.jl`](https://github.com/domluna/JuliaFormatter.jl) on the repo in the way set in the `.JuliaFormatter.toml` file, which enforces a number of conventions.

This contribution guide was inspired by [ColPrac](https://github.com/SciML/ColPrac) and the one in [Manopt.jl](https://github.com/JuliaManifolds/Manopt.jl).
21 changes: 12 additions & 9 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
name = "Boscia"
uuid = "36b166db-dac5-4d05-b36a-e6c4cef071c9"
version = "0.2.12"
authors = ["ZIB IOL"]
version = "0.1.39"

[deps]
Bonobo = "f7b14807-3d4d-461a-888a-05dd4bca8bc3"
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
FrankWolfe = "f55ce6ea-fdc5-4628-88c5-0087fe54bd30"
Hungarian = "e91730f6-4275-51fb-a7a0-7064cfbd3b39"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
MathOptSetDistances = "3b969827-a86c-476c-9527-bb6f1a8fbad5"
Expand All @@ -27,20 +25,21 @@ BosciaSCIPExt = "SCIP"

[compat]
Aqua = "0.8"
Bonobo = "0.1.3"
DataStructures = "0.18"
Bonobo = "0.1.5"
CSV = "0.10"
CombinatorialLinearOracles = "0.1.2"
Dates = "1.6"
Distributions = "0.25"
DoubleFloats = "1"
FrankWolfe = "0.5"
FrankWolfe = "0.6"
Graphs = "1.13"
HiGHS = "1"
Hungarian = "0.7.0"
LinearAlgebra = "1.6"
MathOptInterface = "1"
MathOptSetDistances = "0.2"
Printf = "1.6"
Random = "1.6"
SCIP = "0.11, 0.12"
SCIP = "0.12"
SparseArrays = "1.10"
StableRNGs = "1"
Statistics = "1.6"
Expand All @@ -50,13 +49,17 @@ julia = "1.6"

[extras]
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
Bonobo = "f7b14807-3d4d-461a-888a-05dd4bca8bc3"
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
CombinatorialLinearOracles = "0002e35e-4a6a-41c8-a2f5-6940c7e5949f"
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
DoubleFloats = "497a8b3b-efae-58df-a0af-a86822472b78"
Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
HiGHS = "87dc4568-4c63-4d18-b0c0-bb2238e4078b"
SCIP = "82193955-e24f-5292-bf16-6f2c5261a85f"
StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3"
Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test", "HiGHS", "Distributions", "SCIP", "DoubleFloats", "StableRNGs", "Aqua", "Suppressor"]
test = ["Test", "HiGHS", "Distributions", "SCIP", "DoubleFloats", "StableRNGs", "Aqua", "Suppressor", "Graphs", "Bonobo", "CSV", "CombinatorialLinearOracles"]
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ The paper presenting the package with mathematical explanations and numerous exa

> Convex mixed-integer optimization with Frank-Wolfe methods: [2208.11010](https://arxiv.org/abs/2208.11010)

A review and tutorial paper presenting the intuition behind the framework and showcasing its use on three examples can be found here:

> Boscia.jl: A review and tutorial: [2511.01479](https://arxiv.org/abs/2511.01479)

`Boscia.jl` uses [`FrankWolfe.jl`](https://github.com/ZIB-IOL/FrankWolfe.jl) for solving the convex subproblems, [`Bonobo.jl`](https://github.com/Wikunia/Bonobo.jl) for managing the search tree, and oracles optimizing linear functions over the feasible set, for instance calling [SCIP](https://scipopt.org) or any MOI-compatible solver to solve MIP subproblems.

## Installation
Expand Down Expand Up @@ -83,7 +87,9 @@ function grad!(storage, x)
@. storage = x-diffw
end

x, _, result = Boscia.solve(f, grad!, lmo, settings_bnb=Boscia.settings_bnb(verbose = true))
settings = Boscia.create_default_settings()
settings.branch_and_bound[:verbose] = true
x, _, result = Boscia.solve(f, grad!, lmo, settings=settings)

Boscia Algorithm.

Expand Down
2 changes: 2 additions & 0 deletions docs/Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
[deps]
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
HiGHS = "87dc4568-4c63-4d18-b0c0-bb2238e4078b"
Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306"
SCIP = "82193955-e24f-5292-bf16-6f2c5261a85f"

[compat]
Documenter = "1.8"
Literate = "2"
48 changes: 44 additions & 4 deletions docs/make.jl
Original file line number Diff line number Diff line change
@@ -1,17 +1,52 @@
using Documenter
using Boscia
# Add the parent directory to LOAD_PATH so we can import Boscia
# This doesn't modify Project.toml, keeping it clean like FrankWolfe.jl
pushfirst!(LOAD_PATH, joinpath(@__DIR__, ".."))

using Documenter, Boscia
using SparseArrays
using LinearAlgebra

using Literate

EXAMPLE_DIR = joinpath(dirname(@__DIR__), "examples")
DOCS_EXAMPLE_DIR = joinpath(@__DIR__, "src", "examples")
DOCS_REFERENCE_DIR = joinpath(@__DIR__, "src", "reference")

function file_list(dir, extension)
return filter(file -> endswith(file, extension), sort(readdir(dir)))
end

function literate_directory(jl_dir, md_dir)
# Remove old markdown files first
for filename in file_list(md_dir, ".md")
filepath = joinpath(md_dir, filename)
rm(filepath)
end

# Process all .jl files that start with "docs"
for filename in file_list(jl_dir, ".jl")
if startswith(filename, "docs")
filepath = joinpath(jl_dir, filename)
Literate.markdown(filepath, md_dir; documenter=true, flavor=Literate.DocumenterFlavor())
end
end
return nothing
end

# Generate markdown files from example .jl files
literate_directory(EXAMPLE_DIR, DOCS_EXAMPLE_DIR)

working_dir = @__DIR__

# Function to copy contents of README.md to index.md
function copy_readme_to_index()
readme_path = joinpath(working_dir, "..", "README.md") # Adjusted path
readme_path = joinpath(working_dir, "..", "README.md")
index_path = joinpath(working_dir, "src", "index.md")
readme_content = read(readme_path, String)
return write(index_path, readme_content)
end

# Call the functions to update index.md and 1_algorithms.md
# Call the function to update index.md
copy_readme_to_index()

# Generate documentation
Expand All @@ -22,6 +57,11 @@ makedocs(
pages=[
"Home" => "index.md",
"How does it work?" => "basics.md",
"Examples" => [
"Network Design Problem" => "examples/docs-01-network-design.md",
"Graph Isomorphism Problem" => "examples/docs-02-graph-isomorphism.md",
"Optimal Design of Experiments" => "examples/docs-03-optimal-design.md",
],
"API Reference" => [
#"reference/0_reference.md",
"reference/1_algorithms.md",
Expand Down
Empty file added docs/src/examples.md
Empty file.
Empty file added docs/src/examples/.gitkeep
Empty file.
Loading
Loading