«Оптимизировать 3-кратный вложенный цикл с заданным набором условий сравнения между переменными цикла» или «оптимизировать нижние/верхние границы»

Для математической задачи я хочу найти решения, которые включают 3 переменных цикла, скажем (e,h,i). У меня есть набор меньших/больших условий для переменных цикла, поэтому есть реальный шанс радикально сократить пространство поиска с -say [1..100,1..100,1..100] , если -скажем- е дано.
Основное условие состоит в том, что на самом деле я работаю с набором из 6 линейных комбинаций e²,h²,i², взятых как многочлены, которые также должны давать квадратное значение, то есть положительное значение. Например, первое условие 2e² - i² = a² , а второе 2e²-h²=b².

      ----------------------
  *ee *hh *ii
----------------------
   2   0  -1  = aa
   2  -1   0  = bb
  -1   1   1  = cc
  -2   1   2  = dd
   1   0   0  = ee        // shown just for completeness
   4  -1  -2  = ff
   3  -1  -1  = gg
   0   1   0  = hh        // shown just for completeness
   0   0   1  = ii        // shown just for completeness

Я пишу ee , hh , ii для простоты записи. Таким образом, из первого условия, чтобы получить положительное значение , я должен иметь 2ee > ii , поэтому для значения переменной цикла e я знаю, что верхняя граница для переменной цикла i равна целому числу, близкому к sqrt(2ee).

Вот 6 соответствующих условий:

         2ee  >       ii
   2ee  >   hh
   -ee  >  -hh- ii
  -2ee  >  -hh-2ii
   4ee  >   hh+2ii
   3ee  >   hh+ ii

Наконец, циклическая конструкция должна быть такой, а верхняя граница для e должна быть как можно больше, чтобы работать за приемлемое время (на самом деле это псевдокод!)

        for e=1 to 1000; ee=e^2 ; hlb=<some-lower-bound>; hub=<some-upper-bound>;
     for h=hlb to hub; hh=h^2 ; ilb=<some-lower-bound>; iub=<some-upper-bound>;
        for i=ilb to iub; ii=i^2;
               aa=2*ee-ii; if !issquare(aa) then next;
               bb=2*ee-hh; if !issquare(bb) then next;
               cc= -ee+hh+ii; if !issquare(cc) then next;
               <and so on; I expext at least 4 squares in aa,bb,cc,dd,ff,gg>
               if condition-is-met then print("one solution:",e,h,i);
        next i;
     next h;
   next e;

Мои вопросы: каковы самые жесткие границы для переменных цикла h и i с учетом e . Я бы больше всего хотел иметь общий анзац для решения такой проблемы.

То, что я нашел до сих пор, комбинируя и агрегируя условия

                 2ee  >    ii,hh
 hh+ ii >   ee    
 hh+2ii >  2ee  
           4ee  >   hh+2ii
           3ee  >   hh+ ii

тогда

                   12ee  >   6ii,6hh
12hh+12ii >  12ee    
 6hh+12ii >  12ee  
             12ee  >   3hh+6ii
             12ee  >   4hh+4ii

используя наименьшие верхние границы (в левой части), соответственно, самые большие нижние границы (в правой части), я думаю, что могу упростить

      24ee > 6hh+12ii >  12ee  >   6hh,6ii, 4hh+4ii

Но тогда я не вижу, как я мог бы упростить это и на самом деле сформулировать hlb,hub,ilb,iub ...

0 ответов

Другие вопросы по тегам