[BACK]Return to drivers_for_m_homogenization.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Product

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Product/drivers_for_m_homogenization.adb, Revision 1.1

1.1     ! maekawa     1: with integer_io;                         use integer_io;
        !             2: with Communications_with_User;           use Communications_with_User;
        !             3: with Numbers_io;                         use Numbers_io;
        !             4: with Timing_Package;                     use Timing_Package;
        !             5: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
        !             6: with Standard_Complex_Solutions_io;      use Standard_Complex_Solutions_io;
        !             7: with Sets_of_Unknowns;                   use Sets_of_Unknowns;
        !             8: with Sets_of_Unknowns_io;                use Sets_of_Unknowns_io;
        !             9: with Partitions_of_Sets_of_Unknowns;     use Partitions_of_Sets_of_Unknowns;
        !            10: with Partitions_of_Sets_of_Unknowns_io;  use Partitions_of_Sets_of_Unknowns_io;
        !            11: with m_Homogeneous_Bezout_Numbers;       use m_Homogeneous_Bezout_Numbers;
        !            12: with m_Homogeneous_Start_Systems;        use m_Homogeneous_Start_Systems;
        !            13: with Interpolating_Homotopies_Driver;
        !            14:
        !            15: package body Drivers_for_m_Homogenization is
        !            16:
        !            17:   procedure m_Homogenization_Info is
        !            18:
        !            19:     i : array(1..15) of string(1..65);
        !            20:
        !            21:   begin
        !            22:     i( 1):="  An m-homogeneous Bezout number is based on a partition  of  the";
        !            23:     i( 2):="set of unknowns, with m the number of sets in the partition.     ";
        !            24:     i( 3):="  The corresponding start system is a linear-product system:  the";
        !            25:     i( 4):="i-th  equation  is  the  product  of linear equations with random";
        !            26:     i( 5):="coefficients in the unknowns of the set of  the  partition.   The";
        !            27:     i( 6):="number  of  factors  in the product of the i-th polynomial equals";
        !            28:     i( 7):="the product of the degrees of the i-th polynomial in the original";
        !            29:     i( 8):="system w.r.t. every set in the partition.                        ";
        !            30:     i( 9):="  Given a partition, the m-homogeneous Bezout number  equals  the";
        !            31:     i(10):="number  of  solutions  of  the corresponding linear-product start";
        !            32:     i(11):="system.  Before the construction  of  the  start  system,  an  m-";
        !            33:     i(12):="homogeneous  Bezout number is first computed in a formal way as a";
        !            34:     i(13):="generalized permanent of a degree matrix.  Either all  partitions";
        !            35:     i(14):="of  the  set  of  unknowns  can  be  evaluated,  or the available";
        !            36:     i(15):="heuristic procedure for generating a partition can be applied.   ";
        !            37:     for k in i'range loop
        !            38:       put_line(i(k));
        !            39:     end loop;
        !            40:   end m_Homogenization_Info;
        !            41:
        !            42:   procedure Driver_for_m_Homogenization
        !            43:                ( file : in file_type; p : in Poly_Sys; b : in out natural;
        !            44:                  q : out Poly_Sys; qsols : out Solution_List ) is
        !            45:
        !            46:     n : natural := p'length;
        !            47:     np : constant natural := Number_of_Partitions(n);
        !            48:
        !            49:     procedure Write_Results ( file : in file_type;
        !            50:                               bz,nz : in natural; z : in partition  ) is
        !            51:     begin
        !            52:       new_line(file);
        !            53:       put(file,"  "); put(file,nz,1);
        !            54:       put(file,"-homogeneous Bezout number is "); put(file,bz,1);
        !            55:       new_line(file);
        !            56:       put(file,"     with partition : "); put(file,z); new_line(file);
        !            57:     end Write_Results;
        !            58:
        !            59:     procedure Save_Results ( qq : in Poly_Sys; qqsols : in Solution_List ) is
        !            60:
        !            61:       qqfile : file_type;
        !            62:
        !            63:     begin
        !            64:       if not Is_Null(qqsols)
        !            65:        then new_line;
        !            66:             put_line("Reading file name to write start system.");
        !            67:             Read_Name_and_Create_File(qqfile);
        !            68:             put_line(qqfile,qq);
        !            69:             new_line(qqfile);
        !            70:             put_line(qqfile,"THE SOLUTIONS : ");
        !            71:             new_line(qqfile);
        !            72:             put(qqfile,Length_Of(qqsols),Head_Of(qqsols).n,qqsols);
        !            73:             Close(qqfile);
        !            74:       end if;
        !            75:     end Save_Results;
        !            76:
        !            77:     function Universe ( n : natural ) return Set is
        !            78:
        !            79:     -- DESCRIPTION : Returns the set of all unknowns.
        !            80:
        !            81:       s : Set := Create(n);
        !            82:
        !            83:     begin
        !            84:       for i in 1..n loop
        !            85:         Add(s,i);
        !            86:       end loop;
        !            87:       return s;
        !            88:     end Universe;
        !            89:
        !            90:     procedure Display_Menu
        !            91:                 ( choice : out character;
        !            92:                   bz,nz : in natural; z : in Partition ) is
        !            93:
        !            94:       ans : character;
        !            95:
        !            96:     begin
        !            97:       new_line;
        !            98:       put_line("MENU for computing m-Homogeneous Bezout Numbers :");
        !            99:       put     ("  0. exit - Bezout number : ");
        !           100:         put(bz,1); put(", partition : "); put(z(1..nz)); new_line;
        !           101:       put_line("  1. Heuristic generation of a partition");
        !           102:       put     ("  2. Enumerate all "); put(np,1); put_line(" partitions");
        !           103:       put_line("  3. Enumerate over #partitions <= given maximum");
        !           104:       put_line("  4. Enumerate till Bezout number <= given minimum");
        !           105:       put_line("  5. Combine stop criteria of strategies 3 and 4");
        !           106:       put_line("  6. Evaluate your own partition");
        !           107:       put("Type number between 0 and 6 to choose : ");
        !           108:       Ask_Alternative(ans,"0123456"); choice := ans;
        !           109:     end Display_Menu;
        !           110:
        !           111:     procedure Dispatch_Menu
        !           112:                  ( file : in file_type; choice : in character;
        !           113:                    bz,nz : in out natural; z : in out Partition ) is
        !           114:
        !           115:     -- DESCRIPTION :
        !           116:     --   Dispatches the choice of the user.
        !           117:
        !           118:     -- ON ENTRY :
        !           119:     --   file      must be opened for output;
        !           120:     --   choice    choice of method;
        !           121:     --   bz        current Bezout number with partition z;
        !           122:     --   nz        number of sets in current partition z;
        !           123:     --   z         current partition is z(1..nz).
        !           124:
        !           125:       max,min : natural;
        !           126:
        !           127:     begin
        !           128:       new_line(file);
        !           129:       case choice is
        !           130:         when '1' => Clear(z); nz := 0;
        !           131:                     put_line(file,"HEURISTIC PARTITIONER :");
        !           132:                     PB(p,bz,nz,z);
        !           133:         when '2' => put(file,"ENUMERATION OF ");
        !           134:                     put(file,np,1); put_line(file," PARTITIONS :");
        !           135:                     Bezout_number(p,bz,nz,z);
        !           136:         when '3' => put("  Give maximum bound : "); Read_Natural(max);
        !           137:                     put(file,"ENUMERATION OF ");
        !           138:                     put(file,max,1); put_line(file," PARTITIONS :");
        !           139:                     Bezout_number(max,p,bz,nz,z);
        !           140:         when '4' => put("  Give minimum bound : "); Read_Natural(min);
        !           141:                     put(file,"ENUMERATION TILL BEZOUT NUMBER <= ");
        !           142:                     put(file,min,1); new_line(file);
        !           143:                     Bezout_number(p,min,bz,nz,z);
        !           144:         when '5' => put("  Give maximum bound : "); Read_Natural(max);
        !           145:                     put("  Give minimum bound : "); Read_Natural(min);
        !           146:                     put(file,"ENUMERATION OF ");
        !           147:                     put(file,max,1); put_line(file," PARTITIONS");
        !           148:                     put(file,"         OR TILL BEZOUT NUMBER <= ");
        !           149:                     put(file,min,1); new_line(file);
        !           150:                     Bezout_number(max,p,min,bz,nz,z);
        !           151:         when '6' => Clear(z); nz := 0;
        !           152:                     put_line(file,"PARTITION PROVIDED BY USER :");
        !           153:                     put("Give the number of sets : "); Read_Positive(nz);
        !           154:                     put("Give "); put(nz,1); put(" sets : ");
        !           155:                     Create(z,n); get(z(1..nz));
        !           156:                     bz := Bezout_Number(p,z);
        !           157:         when others => null;
        !           158:       end case;
        !           159:       Write_Results(file,bz,nz,z(1..nz));
        !           160:       Write_Results(Standard_Output,bz,nz,z(1..nz));
        !           161:     end Dispatch_Menu;
        !           162:
        !           163:     procedure Driver_for_Partition
        !           164:                  ( file : in file_type;
        !           165:                    bz,nz : in out natural; z : in out Partition ) is
        !           166:
        !           167:       method : character;
        !           168:       timer : timing_widget;
        !           169:
        !           170:     begin
        !           171:       new_line(file);
        !           172:       put_line(file,"M-HOMOGENIZATION :");
        !           173:       tstart(timer);
        !           174:       loop
        !           175:         Display_Menu(method,bz,nz,z);
        !           176:         exit when method = '0';
        !           177:         Dispatch_Menu(file,method,bz,nz,z);
        !           178:       end loop;
        !           179:       tstop(timer);
        !           180:       new_line(file);
        !           181:       print_times(file,timer,"Computation of m-homogeneous Bezout number");
        !           182:     end Driver_for_Partition;
        !           183:
        !           184:     procedure Driver_for_Start_System
        !           185:                  ( file : in file_type; bz : in natural; z : in Partition ) is
        !           186:
        !           187:       ans : character;
        !           188:       timer : timing_widget;
        !           189:       qq : Poly_Sys(p'range);
        !           190:       qqsols : Solution_List;
        !           191:       bb : natural := bz;
        !           192:
        !           193:     begin
        !           194:       new_line;
        !           195:       put_line("MENU for m-Homogeneous Start Systems :");
        !           196:       put_line("  0. No construction of m-homogeneous start system.");
        !           197:       put_line("  1. Start system based on interpolation.");
        !           198:       put_line("  2. Random linear-product start system.");
        !           199:       put("Type 0,1, or 2 to choose : "); Ask_Alternative(ans,"012");
        !           200:       if ans /= '0'
        !           201:        then tstart(timer);
        !           202:             if ans = '1'
        !           203:              then Interpolating_Homotopies_Driver(file,p,z,bb,qq,qqsols);
        !           204:              else m_Homogeneous_Start_System(p,z,qq,qqsols);
        !           205:             end if;
        !           206:             tstop(timer);
        !           207:             Save_Results(qq,qqsols);
        !           208:             q := qq; qsols := qqsols;
        !           209:             new_line(file);
        !           210:             put(file,z'last,1);
        !           211:             put_line(file,"-HOMOGENEOUS START SYSTEM : ");
        !           212:             put_line(file,qq);
        !           213:             new_line(file);
        !           214:             put_line(file,"THE SOLUTIONS :");
        !           215:             new_line(file);
        !           216:             put(file,Length_Of(qqsols),Head_Of(qqsols).n,qqsols);
        !           217:             new_line(file);
        !           218:             print_times(file,timer,
        !           219:                         "Construction of m-homogeneous start system");
        !           220:       end if;
        !           221:     end Driver_for_Start_System;
        !           222:
        !           223:     procedure Main_Driver is
        !           224:
        !           225:       z : Partition(1..n);
        !           226:       bz,nz : natural;
        !           227:
        !           228:     begin
        !           229:       nz := 1; z(1) := Universe(n); bz := Total_Degree(p);
        !           230:       Driver_for_Partition(file,bz,nz,z);
        !           231:       Driver_for_Start_System(file,bz,z(1..nz));
        !           232:       b := bz;
        !           233:     end Main_Driver;
        !           234:
        !           235:   begin
        !           236:     Main_Driver;
        !           237:   end Driver_for_m_Homogenization;
        !           238:
        !           239: end Drivers_for_m_Homogenization;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>