[BACK]Return to drivers_for_multi_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_multi_homogenization.adb, Revision 1.1

1.1     ! maekawa     1: with integer_io;                         use integer_io;
        !             2: with Timing_Package;                     use Timing_Package;
        !             3: with Communications_with_User;           use Communications_with_User;
        !             4: with Numbers_io;                         use Numbers_io;
        !             5: with Standard_Natural_Vectors;
        !             6: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
        !             7: with Standard_Complex_Solutions_io;      use Standard_Complex_Solutions_io;
        !             8: with Sets_of_Unknowns;                   use Sets_of_Unknowns;
        !             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 Degree_Structure;                   use Degree_Structure;
        !            12: with Multi_Homogeneous_Start_Systems;    use Multi_Homogeneous_Start_Systems;
        !            13:
        !            14: package body Drivers_for_Multi_Homogenization is
        !            15:
        !            16:   procedure Multi_Homogenization_Info is
        !            17:
        !            18:     i : array(1..17) of string(1..65);
        !            19:
        !            20:   begin
        !            21:     i( 1):="  A multi-homogeneous Bezout  number  is  based  on  a  tuple  of";
        !            22:     i( 2):="partitions  of  the set of unknowns.  For every polynomial in the";
        !            23:     i( 3):="system, a different partition can model its structure.           ";
        !            24:     i( 4):="  The corresponding start system is a linear-product system:  the";
        !            25:     i( 5):="i-th  equation  is  the  product  of linear equations with random";
        !            26:     i( 6):="coefficients in the unknowns of the set of  the  partition.   The";
        !            27:     i( 7):="number  of  factors  in  the product for the i-th equation of the";
        !            28:     i( 8):="start system equals the  product  of  the  degrees  of  the  i-th";
        !            29:     i( 9):="polynomial  in  the  original  system  w.r.t.  every  set  in the";
        !            30:     i(10):="partition.                                                       ";
        !            31:     i(11):="  Given a  tuple  of  partitions,  the  multi-homogeneous  Bezout";
        !            32:     i(12):="number  equals  the  number  of  solutions  of  the corresponding";
        !            33:     i(13):="linear-product start system.   Before  the  construction  of  the";
        !            34:     i(14):="start system, a multi-homogeneous Bezout number is first computed";
        !            35:     i(15):="in a formal way as a generalized permanent of a degree matrix.  A";
        !            36:     i(16):="heuristic  procedure  is  available  for  generating  a  tuple of";
        !            37:     i(17):="partitions.                                                      ";
        !            38:     for k in i'range loop
        !            39:       put_line(i(k));
        !            40:     end loop;
        !            41:   end Multi_Homogenization_Info;
        !            42:
        !            43:   procedure Driver_for_Multi_Homogenization
        !            44:                 ( file : in file_type; p : in Poly_Sys; b : in out natural;
        !            45:                   q : out Poly_Sys; qsols : out Solution_List ) is
        !            46:
        !            47:     procedure Write_Results ( file : in file_type; gb : in natural ) is
        !            48:
        !            49:       m : natural;
        !            50:
        !            51:     begin
        !            52:       new_line(file);
        !            53:       put(file,"  multi-homogeneous Bezout number is ");
        !            54:       put(file,gb,1); new_line(file);
        !            55:       put_line(file,"  with partitions :");
        !            56:       for i in p'range loop
        !            57:         m := Degree_Structure.Get(i);
        !            58:         declare
        !            59:           z : partition(1..m);
        !            60:           dg : Standard_Natural_Vectors.Vector(1..m);
        !            61:         begin
        !            62:           Degree_Structure.Get(i,z,dg);
        !            63:           put(file,"     partition for equation "); put(file,i,2);
        !            64:           put(file," : "); put(file,z); new_line(file);
        !            65:           Clear(z);
        !            66:         end;
        !            67:       end loop;
        !            68:     end Write_Results;
        !            69:
        !            70:     procedure Save_Results ( qq : in Poly_Sys; qqsols : in Solution_List ) is
        !            71:
        !            72:       qqfile : file_type;
        !            73:
        !            74:     begin
        !            75:       if not Is_Null(qqsols)
        !            76:        then new_line;
        !            77:             put_line("Reading file name to write start system.");
        !            78:             Read_Name_and_Create_File(qqfile);
        !            79:             put_line(qqfile,qq);
        !            80:             new_line(qqfile);
        !            81:             put_line(qqfile,"THE SOLUTIONS : ");
        !            82:             new_line(qqfile);
        !            83:             put(qqfile,Length_Of(qqsols),Head_Of(qqsols).n,qqsols);
        !            84:             Close(qqfile);
        !            85:       end if;
        !            86:     end Save_Results;
        !            87:
        !            88:     procedure Display_Menu ( choice : out character; gb : in natural ) is
        !            89:
        !            90:       ans : character;
        !            91:
        !            92:     begin
        !            93:       new_line;
        !            94:       put_line("MENU for Multi-Homogeneous Bezout Numbers :");
        !            95:       put     ("  0. exit - current Bezout number is "); put(gb,1); new_line;
        !            96:       put_line("  1. Apply heuristic partitioner");
        !            97:       put_line("  2. Evaluate your own tuple of partitions.");
        !            98:       put("Type 0, 1, or 2 to make your choice : ");
        !            99:       Ask_Alternative(ans,"012"); choice := ans;
        !           100:     end Display_Menu;
        !           101:
        !           102:     procedure Dispatch_Menu ( choice : in character; gb : in out natural ) is
        !           103:
        !           104:       m : natural;
        !           105:
        !           106:     begin
        !           107:       case choice is
        !           108:         when '1' => gb := Degree_Structure.Generalized_Bezout_Number(p);
        !           109:         when '2' => for i in p'range loop
        !           110:                       put("Give the number of sets in partition ");
        !           111:                       put(i,1); put(" : "); Read_Natural(m);
        !           112:                       put("Give "); put(m,1); put(" sets : ");
        !           113:                       declare
        !           114:                         zz : Partition(1..m);
        !           115:                       begin
        !           116:                         Create(zz,p'length); get(zz);
        !           117:                         Degree_Structure.Put(p,i,m,zz);
        !           118:                         Clear(zz);
        !           119:                       end;
        !           120:                     end loop;
        !           121:                     gb := Degree_Structure.Generalized_Bezout_Number;
        !           122:         when others => null;
        !           123:       end case;
        !           124:       Write_Results(Standard_Output,gb); Write_Results(file,gb);
        !           125:     end Dispatch_Menu;
        !           126:
        !           127:     procedure Driver_for_Partitions
        !           128:                   ( file : in file_type; gb : in out natural ) is
        !           129:
        !           130:       timer : timing_widget;
        !           131:       method : character;
        !           132:
        !           133:     begin
        !           134:       new_line(file);
        !           135:       put_line(file,"MULTI-HOMOGENIZATION :");
        !           136:       tstart(timer);
        !           137:       loop
        !           138:         Display_Menu(method,gb);
        !           139:         exit when method = '0';
        !           140:         Dispatch_Menu(method,gb);
        !           141:       end loop;
        !           142:       tstop(timer);
        !           143:       b := gb;
        !           144:       new_line(file);
        !           145:       print_times(file,timer,"Computation of multi-homogeneous Bezout number");
        !           146:     end Driver_for_Partitions;
        !           147:
        !           148:     procedure Driver_for_Start_System ( file : in file_type ) is
        !           149:
        !           150:       ans : character;
        !           151:       timer : timing_widget;
        !           152:       qq : Poly_Sys(p'range);
        !           153:       qqsols : Solution_List;
        !           154:
        !           155:     begin
        !           156:       new_line;
        !           157:       put("Do you want a multi-homogeneous start system ? (y/n) ");
        !           158:       Ask_Yes_or_No(ans);
        !           159:       if ans = 'y'
        !           160:        then
        !           161:          tstart(timer);
        !           162:          GBQ(p,qq,qqsols);
        !           163:          tstop(timer);
        !           164:          Save_Results(qq,qqsols);
        !           165:          new_line(file);
        !           166:          put_line(file,"MULTI-HOMOGENEOUS START SYSTEM :");
        !           167:          put_line(file,qq);
        !           168:          q := qq; qsols := qqsols;
        !           169:          new_line(file);
        !           170:          put_line(file,"THE SOLUTIONS :");
        !           171:          new_line(file);
        !           172:          put(file,Length_Of(qqsols),Head_Of(qqsols).n,qqsols);
        !           173:          new_line(file);
        !           174:          print_times(file,timer,
        !           175:                      "Construction of multi-homogeneous start system");
        !           176:       end if;
        !           177:     end Driver_for_Start_System;
        !           178:
        !           179:     procedure Main_Driver is
        !           180:
        !           181:       gb : natural := b;
        !           182:
        !           183:     begin
        !           184:       Driver_for_Partitions(file,gb);
        !           185:       if not Degree_Structure.Empty
        !           186:        then Driver_for_Start_System(file);
        !           187:       end if;
        !           188:     end Main_Driver;
        !           189:
        !           190:   begin
        !           191:     Main_Driver;
        !           192:   end Driver_for_Multi_Homogenization;
        !           193:
        !           194: end Drivers_for_Multi_Homogenization;

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