[BACK]Return to drivers_for_set_structures.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_set_structures.adb, Revision 1.1.1.1

1.1       maekawa     1: with integer_io;                         use integer_io;
                      2: with Communications_with_User;           use Communications_with_User;
                      3: with Timing_Package;                     use Timing_Package;
                      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 Set_Structure,Set_Structure_io;
                      9: with Degree_Sets_Tables;                 use Degree_Sets_Tables;
                     10: with Random_Product_System;
                     11: with Random_Product_Start_Systems;       use Random_Product_Start_Systems;
                     12:
                     13: package body Drivers_for_Set_Structures is
                     14:
                     15:   procedure Set_Structure_Info is
                     16:
                     17:     i : array(1..18) of string(1..65);
                     18:
                     19:   begin
                     20:     i( 1):="  A generalized Bezout  number  is  based  on  a  supporting  set";
                     21:     i( 2):="structure.   A  set  structure is a tuple of arrays of subsets of";
                     22:     i( 3):="unknowns.                                                        ";
                     23:     i( 4):="  The corresponding start system is a linear-product system:  the";
                     24:     i( 5):="i-th  equation  is  the  product  of linear equations with random";
                     25:     i( 6):="coefficient in the unknowns of the set of the  i-th  array.   The";
                     26:     i( 7):="number  of  factors  in  the product for the i-th equation of the";
                     27:     i( 8):="start system equals the number of subsets in the  i-th  array  of";
                     28:     i( 9):="the set structure.                                               ";
                     29:     i(10):="  A set structure is supporting for a polynomial system if  every";
                     30:     i(11):="monomial  in  the system also occurs in the corresponding linear-";
                     31:     i(12):="product start system.                                            ";
                     32:     i(13):="  Given a supporting set structure, the generalized Bezout number";
                     33:     i(14):="equals  the  number  of  solutions  of  the corresponding linear-";
                     34:     i(15):="product start system.   Before  the  construction  of  the  start";
                     35:     i(16):="system, a generalized Bezout number is first computed in a formal";
                     36:     i(17):="way as a generalized permanent of a degree matrix.   A  heuristic";
                     37:     i(18):="procedure is available for generating a supporting set structure.";
                     38:     for k in i'range loop
                     39:       put_line(i(k));
                     40:     end loop;
                     41:   end Set_Structure_Info;
                     42:
                     43:   procedure Driver_for_Set_Structure
                     44:                ( file : in file_type; p : in Poly_Sys;
                     45:                  b : in out natural; lpos : in out List;
                     46:                  q : out Poly_Sys; qsols : out Solution_List ) is
                     47:
                     48:     procedure Write_Results ( file : in file_type; bb : in natural ) is
                     49:     begin
                     50:       new_line(file);
                     51:       put(file,"  generalized Bezout number is "); put(file,bb,1);
                     52:       new_line(file);
                     53:       put_line(file,"  based on the set structure :");
                     54:       Set_Structure_io.put(file);
                     55:     end Write_Results;
                     56:
                     57:     procedure Save_Results ( qq : in Poly_Sys; qqsols : in Solution_List ) is
                     58:
                     59:       qqfile : file_type;
                     60:
                     61:     begin
                     62:       if not Is_Null(qqsols)
                     63:        then new_line;
                     64:             put_line("Reading file name to write start system.");
                     65:             Read_Name_and_Create_File(qqfile);
                     66:             put_line(qqfile,qq);
                     67:             new_line(qqfile);
                     68:             put_line(qqfile,"THE SOLUTIONS : ");
                     69:             new_line(qqfile);
                     70:             put(qqfile,Length_Of(qqsols),Head_Of(qqsols).n,qqsols);
                     71:             Close(qqfile);
                     72:       end if;
                     73:     end Save_Results;
                     74:
                     75:     procedure Display_Menu ( choice : out character; bb : in natural ) is
                     76:
                     77:       ans : character;
                     78:
                     79:     begin
                     80:       new_line;
                     81:       put_line("MENU for generalized Bezout Numbers based on Set Structures :");
                     82:       put     ("  0. exit - current Bezout number is "); put(bb,1); new_line;
                     83:       put_line("  1. Apply heuristic constructor for set structure");
                     84:       put_line("  2. Evaluate your own set structure");
                     85:       put("Type 0, 1, or 2 to make your choice : ");
                     86:       Ask_Alternative(ans,"012"); choice := ans;
                     87:     end Display_Menu;
                     88:
                     89:     procedure Dispatch_Menu ( file : in file_type;
                     90:                               choice : in character; bb : in out natural ) is
                     91:     begin
                     92:       case choice is
                     93:         when '1' =>
                     94:           Random_Product_Start_Systems.Build_Set_Structure(p);
                     95:           bb := Permanent(Degree_Sets_Tables.Create);
                     96:         when '2' =>
                     97:           declare
                     98:             ns : Standard_Natural_Vectors.Vector(p'range);
                     99:           begin
                    100:             for i in ns'range loop
                    101:               put("  Give the number of sets for polynomial ");
                    102:               put(i,1); put(" : "); Read_Natural(ns(i));
                    103:             end loop;
                    104:             Set_Structure.Init(ns);
                    105:             put_line("Give the set structure :");
                    106:             Set_Structure_io.get;
                    107:           end;
                    108:           bb := Permanent(Degree_Sets_Tables.Create);
                    109:         when others => null;
                    110:       end case;
                    111:       Write_Results(Standard_Output,bb); Write_Results(file,bb);
                    112:     end Dispatch_Menu;
                    113:
                    114:     procedure Driver_for_Bezout_Number
                    115:                   ( file : in file_type; bb : in out natural ) is
                    116:
                    117:       method : character;
                    118:       timer : timing_widget;
                    119:
                    120:     begin
                    121:       new_line(file);
                    122:       put_line(file,"SET STRUCTURE ANALYSIS :");
                    123:       tstart(timer);
                    124:       loop
                    125:         Display_Menu(method,bb);
                    126:         exit when method = '0';
                    127:         Dispatch_Menu(file,method,bb);
                    128:       end loop;
                    129:       tstop(timer);
                    130:       new_line(file);
                    131:       print_times(file,timer,"set structure analysis");
                    132:     end Driver_for_Bezout_Number;
                    133:
                    134:     procedure Driver_for_Start_System
                    135:                   ( file : in file_type; bb : in natural ) is
                    136:
                    137:       ans : character;
                    138:       timer : timing_widget;
                    139:       qq : Poly_Sys(p'range);
                    140:       qqsols : Solution_List;
                    141:
                    142:     begin
                    143:       new_line;
                    144:       put("Do you want a start system based on the set structure ? (y/n) ");
                    145:       Ask_Yes_or_No(ans);
                    146:       if ans = 'y'
                    147:        then
                    148:          declare
                    149:            nl : natural;
                    150:            n : natural := p'length;
                    151:          begin
                    152:           -- new_line;
                    153:           -- put("Solving "); put(bb,1); put(" linear systems...");
                    154:            tstart(timer);
                    155:            Random_Product_System.Init(n);
                    156:            Build_Random_Product_System(n);
                    157:            Set_Structure.Clear;
                    158:            qq := Random_Product_System.Polynomial_System;
                    159:           -- Random_Product_System.Solve(qqsols,nl,lpos);
                    160:            Random_Product_System.Solve(qqsols,nl);
                    161:            Random_Product_System.Clear;
                    162:            tstop(timer);
                    163:            Save_Results(qq,qqsols);
                    164:            q := qq; qsols := qqsols;
                    165:            new_line(file);
                    166:            put_line(file,"RANDOM LINEAR-PRODUCT START SYSTEM : ");
                    167:            put_line(file,qq);
                    168:            new_line(file);
                    169:            put_line(file,"THE SOLUTIONS :");
                    170:            new_line(file);
                    171:            put(file,Length_Of(qqsols),Head_Of(qqsols).n,qqsols);
                    172:            new_line(file);
                    173:            print_times(file,timer,"constructing and solving the start system");
                    174:          end;
                    175:        else
                    176:          Set_Structure.Clear;
                    177:       -- Clear(lpos);
                    178:       end if;
                    179:     end Driver_for_Start_System;
                    180:
                    181:     procedure Main_Driver is
                    182:
                    183:       bb : natural := b;
                    184:
                    185:     begin
                    186:       Driver_for_Bezout_Number(file,bb);
                    187:       if not Set_Structure.Empty
                    188:        then b := bb;
                    189:             Driver_for_Start_System(file,bb);
                    190:       end if;
                    191:     end Main_Driver;
                    192:
                    193:   begin
                    194:     Main_Driver;
                    195:   end Driver_for_Set_Structure;
                    196:
                    197: end Drivers_for_Set_Structures;

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