3
$\begingroup$

There are many great algorithms for enumeration of vectors in a lattice such as Fincke-Pohst-Kannan, extreme pruning etc, not to mention great implementations such as fplll.

Let $L$ be high density (Goldstein-Mayer) integer lattice of dimension $n$ and let $B$ be a basis for $L$ of full rank. Suppose instead of trying to find a shortest vector of the full lattice $L$ we want to find a shortest vector restricted to one of the orthants of $L$, e.g. the positive orthant (it would obviously do to find this in the negative orthant and flip the signs).

Can the enumeration algorithms be adapted to find the shortest vector only in the positive orthant?

It seems a reasonable (soft) question to ask since for a given $\ell_2$-norm there are far fewer vectors in an orthant than in the full lattice.

An answer might include a guess of the number of such vectors of bounded norm $m$ in the orthants, compared to the total number of vectors in $L$ of norm bounded by $m$ (which is an interesting question in itself I couldn't quickly find an answer to).

Edit: It is an interesting amendment to consider what happens if we have an extremely good basis for $L$, perhaps found by the asymptotically better sieving algorithms. Suppose we have a 'close-to-Minkowski-reduced' basis, does this make SVP in an orthant easier?

$\endgroup$
3
  • $\begingroup$ Please use a high-level tag like "nt.number-theory". I added this tag now. Regarding high-level tags, see meta.mathoverflow.net/q/1075 $\endgroup$ Commented Aug 30 at 21:51
  • $\begingroup$ I don't have much to say about this question, but I do at least know that there's a paper proving that this problem is NP-hard: link.springer.com/chapter/10.1007/978-3-319-06320-1_37 $\endgroup$ Commented Nov 9 at 3:18
  • $\begingroup$ @NoahStephens-Davidowitz thanks for the useful reference. I did some other digging after this question and found an algorithm by Joux/Howgrave-Graham that solves the roughly related hard 0/1 knapsack problem. I did an implementation of the first algorithm in the paper here github.com/oisinresearch/knapsack, it can solve e.g. dimension 72 in about 2 hours on a 128 core node. I plan to incorporate the other improvements, then it might be able to reach dimension 100 or so. $\endgroup$ Commented Nov 9 at 10:54

2 Answers 2

1
$\begingroup$

This is not a full answer but it at least rules out one approach which appears promising but turns out not to be practical at the problem sizes of interest.

I had thought the problem might be solved by Integer Linear Programming (ILP) by writing the lattice basis as a matrix $A$ of dimension $n \times n$, with a vector $x$ of $n$ unknowns. I was particularly interested in the case where the vector $Ax \in \{0,1\}^n$, which is a simple test case.

It is easy to set this up as an instance of ILP, where we require

$$Ax = y$$

with $y$ a vector of $n$ unknowns, each of which is constrained as a binary variable. We allow slightly larger bounds for $x$, to make sure there is a feasible solution. I tried 3 experiments with the ILP solver Cbc (https://github.com/coin-or/Cbc). It was able to solve the cases $n = 10$ and $n = 30$ easily, however it had much more trouble with an $n = 50$ case. It took about 20 minutes to certify that with bounds $-2 \leq x_i \leq 2$ there was no feasible solution. In all 3 cases the matrices had entries mostly in $\{-1,0,1\}$.

Seeing as I was hoping the case $n = 128$ or above would work it does not hold out much hope that ILP will solve it, as it might be necessary to take even larger bounds for $x$ and this will probably make it completely impractical.

So to solve this problem it is probably necessary to come up with some elegant algorithm that takes full advantage of the lattice structure, perhaps like the sieving algorithms do for SVP.

$\endgroup$
0
$\begingroup$

Another answer for a completely different approach that has more potential to produce a correct answer in high dimensions.

I created a high density lattice $L$ in dimension 97 from the identity with the following first row (vectors are columns):

[1849600401647997099719919617918, 77491606716638510245109537658, 1525976942917100825918475963, 74020030346105712528538189620, 51941909136916852113082350389, 14011368459601438276486807412, 50822939581149515856915735546, 2509725539352575690590079057, 71748135378136038959690456165, 44171810008920839742209859013, 32719850946638740383177195077, 30023966707232726541396407076, 4410448856566107235653959856, 22022346329990180543792971711, 7269505503990621246930936020, 5107569876022684367034274130, 47778510178448380848329851693, 3169027828311763162013444590, 57480237440919598172784764429, 13180659738586100049888825360, 60213343575174306448588865612, 65767716966639197940060401284, 32829858938231484496185322443, 62920352240097256280791858782, 68771691370698613819098072377, 1189446426775895534566399888, 15622321082446447641269029228, 44854197141206405708649394123, 18743069471287551089559748119, 78100141274951600010628631304, 41336653782179264170800348173, 28886061428722075757026880056, 10430320172190962448775321281, 23275291645042566655909933981, 9052772967664433789458201405, 75118661056395305373457649071, 36024369475873917291385515901, 24329686458049949630078669272, 21999841835292501255568512142, 35735166411960669882213981372, 37822428212473917877193850830, 21508264293370451672165513701, 11674532436606371783473819749, 6242499836401929922573545309, 44310331499846649220024243828, 52015012976023730286199334013, 9946920677622169606617681376, 47598058001625475755489112483, 57667202535436450251667859446, 67120509210736141602830685965, 62099852611535925832337479401, 20379832896127026776968623871, 56578972203046231525042405448, 52003353802918059453785164051, 56586003582175107572782034325, 77415032294150861160530555875, 27716827577183024283562170388, 56838383954420862660792615481, 77244740436710851110420556574, 34907304650256412809700886291, 64664781684296567841076011641, 47531215060867292720500337851, 24488984341820349659649621937, 48259263501801547468879409155, 68079961159219693040054958499, 70346145409960265348894545256, 74735588078890947855987725542, 47998837475838422523126923115, 58202334552136529552226186712, 356488283196519720283167114, 34379228951744427157065767394, 19288837674944009785234496912, 19815697624832173898316400583, 22888127129397336162600462702, 12402340382435329901966351103, 7343124368453544417346578155, 47945165517372728594283927672, 22348591021805731698927620947, 48204981766234374553968627534, 30159946581970181385152488904, 10900707776910254490250210209, 15260134540509522683945503275, 27948496473361408358754701178, 48182739123020986961217661572, 35980702830244507680285631127, 70230630306463989263728556892, 56047883827612733579048229880, 9623951329583261678855132961, 55680584783950871236564644585, 60661234139611717690479236612, 54823003493318948369949365698, 31413576619803196280952014808, 35338249047649796737419966138, 31287456730543657901971615872, 78834491773686153881906217163, 53375041532170131381123655147, 36830407022141621320829586473]

(each of these has about 96 bits, this gives density approx 1.0, the hardest case to e.g. solve exact 0/1 knapsack, which was my original motivation).

I then used the gpu-optimized version of G6K of Wessel Van Woerden (see here) repeatedly to find as good a basis for $L$ as possible. On 4 NVIDIA A100s I was able in about 2 hours of realtime to find a basis with 1,4,18,73,1 vectors resp. of $\ell_2$-norm 24,25,26,27,99 resp. This is not Minkowski-reduced, but is considerably better than e.g. LLL can do (or even BKZ in reasonable time). I seemed to have to pick one large vector to ensure the basis had full rank.

I had the idea to look for vectors closest to `reasonably small' vectors in the positive orthant.

To find the closest vectors I used the Kannan embedding technique, which converts an SVP solver to a CVP solver in one dimension higher (see e.g. here).

Using this I picked fairly randomly the following non-lattice vector

$$(2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 3, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 2, 2, 3, 2, 2, 3, 2, 3, 3, 3, 3, 2, 2, 2, 3, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, 2)^\top$$

and again with Van Woerden's implementation I found the following actual lattice vector in the positive orthant:

$$(2, 3, 4, 2, 1, 2, 4, 3, 2, 3, 1, 2, 2, 3, 4, 1, 3, 1, 2, 2, 3, 2, 2, 2, 1, 2, 3, 2, 3, 1, 3, 1, 3, 3, 3, 1, 3, 2, 4, 6, 3, 1, 2, 3, 3, 2, 1, 2, 4, 4, 1, 3, 4, 2, 2, 4, 2, 2, 2, 3, 3, 3, 1, 3, 3, 4, 1, 2, 2, 4, 2, 1, 3, 2, 1, 4, 3, 1, 3, 4, 6, 4, 2, 3, 3, 3, 1, 3, 3, 1, 2, 3, 3, 3, 4, 3, 1)^\top$$

in almost no time at all (a few seconds). Since the individual CVP instances can be solved so quickly, it opens the possibility to find many more short vectors in the positive orthant by running e.g. 1000s of CVP instances for random small positive non-lattice vectors.

I'm not 100% sure the good basis was crucial, but technically in the Kannan embedding we need the last coordinate to be 1 and this doesn't always get returned by the 'pumping' mechanism of the gpu SVP solver, but you can access the top $n$ (dimension) lifts and at least one of these is guaranteed to have this 1 coordinate because the top $n$ lifts are a basis for $L$.

I would really welcome any comments or ideas on how to improve this approach to find the shortest vector in the positive orthant. This would solve 0/1 knapsack (in exponential time of course but it would make many more dimensions feasible with gpu acceleration).

$\endgroup$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.