Skip to content

Conversation

@Garrett-Pz
Copy link
Collaborator

  • The file reductions.rs has been added. At the moment includes only the reduction to maximum weighted clique.
    • Add the struct CompatGraph to hold the graph of the max weight clique problem. Weights are not stored as part of the struct, and instead are calculated from matches when needed.
    • CompatGraph currently uses a adjacency matrix representation, implemented as Vec<BitSet>.
  • recurse_index_search now uses a bitset subgraph to represent what matches to search next, instead of slicing the matches list.
    • This structure can be used both when the CompatGraph is used or not used.
  • Adds new CLI parameter --clique, which when enabled builds and uses the CompatGraph for searching.
    • If kernels or bounds using CompatGraph are turned on without --clique also turned on, the program will panic.
  • Added new bounds to be used when --clique is enabled.
    • CliqueBudget uses the CompatGraph to determine what duplicates can be removed from each fragment. This information can be used to get a quick estimate of the best possible removals for each fragment.
    • CoverBoundNoSort and CoverBoundSort find an independent set cover in the graph, which can be used to bound the max weight clique. Using CoverBoundSort first sorts the vertices in decreasing order of degree.
  • Added functions deletion_kernel and inclusion_kernel to kernels.rs.
    • Kernel methods taken from Lamm et al. 2019. https://doi.org/10.1137/1.9781611975499.12
    • Deletion kernel looks for dominating vertices and removes matches from consideration.
    • Inclusion kernel looks for vertices using the neighborhood removal and isolated vertex removal methods. Finds vertices that must be included as part of some max weight clique.

@Garrett-Pz Garrett-Pz requested a review from jdaymude July 29, 2025 23:28
@jdaymude jdaymude added the algorithm A new or improved algorithm label Aug 4, 2025
@jdaymude
Copy link
Contributor

jdaymude commented Aug 6, 2025

More for myself than anyone else: this PR should also include the following kernelization tests:

  • On coconut_55, the fastest memoization method, depth-one parallelism, no clique bounds, and always kernelization.
  • On coconut_55, no memoization, depth-one parallelism, all bounds, and always kernelization.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

algorithm A new or improved algorithm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants