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

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Symmetry/driver_for_symmetric_set_structure.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 Timing_Package;                     use Timing_Package;
        !             4: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
        !             5: with Numbers_io;                         use Numbers_io;
        !             6: with Standard_Natural_Vectors;           use Standard_Natural_Vectors;
        !             7: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
        !             8: with Lists_of_Integer_Vectors_io;        use Lists_of_Integer_Vectors_io;
        !             9: with Standard_Complex_Solutions;         use Standard_Complex_Solutions;
        !            10: with Standard_Complex_Solutions_io;      use Standard_Complex_Solutions_io;
        !            11: with Random_Product_System;
        !            12: with Random_Product_System_io;
        !            13: with Set_Structure,Set_Structure_io;     use Set_Structure;
        !            14: with Degree_Sets_Tables;                 use Degree_Sets_Tables;
        !            15: with Orbits_of_Solutions;                use Orbits_of_Solutions;
        !            16: with Permutations,Symmetry_Group;        use Permutations,Symmetry_Group;
        !            17: with Symmetry_Group_io;                  use Symmetry_Group_io;
        !            18: with Symbolic_Symmetry_Group_io;         use Symbolic_Symmetry_Group_io;
        !            19: with Drivers_for_Symmetry_Group_io;      use Drivers_for_Symmetry_Group_io;
        !            20: with Symmetric_Set_Structure;            use Symmetric_Set_Structure;
        !            21: with Equivariant_Polynomial_Systems;     use Equivariant_Polynomial_Systems;
        !            22: with Linear_Symmetric_Reduction;         use Linear_Symmetric_Reduction;
        !            23:
        !            24: package body Driver_for_Symmetric_Set_Structure is
        !            25:
        !            26:   procedure Symmetric_Set_Structure_Info is
        !            27:
        !            28:     i : array(1..5) of string(1..65);
        !            29:
        !            30:   begin
        !            31:     i(1):="  A symmetric generalized Bezout number is based on  a  symmetric";
        !            32:     i(2):="supporting  set  structure  and  allows  to  exploit  permutation";
        !            33:     i(3):="symmetries in the system.  The corresponding linear-product start";
        !            34:     i(4):="system has the same symmetric structure, so that in the homotopy,";
        !            35:     i(5):="only the generating solution paths need to be traced.            ";
        !            36:     for k in i'range loop
        !            37:       put_line(i(k));
        !            38:     end loop;
        !            39:   end Symmetric_Set_Structure_Info;
        !            40:
        !            41:   procedure Driver_for_Symmetric_Random_Product_Systems
        !            42:                   ( file : in file_type; p : in Poly_Sys; q : out Poly_Sys;
        !            43:                     qsols : out Solution_List; bs : in out natural;
        !            44:                     lpos : in out List ) is
        !            45:
        !            46:     tol : constant double_float := 10.0**(-12);
        !            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 Write_Orbits
        !            76:                 ( file : in file_type; qqsols : in Solution_List ) is
        !            77:
        !            78:       orb : constant Permutation := Orbits(qqsols,tol);
        !            79:
        !            80:     begin
        !            81:       new_line;
        !            82:       put("The number of generating solutions : ");
        !            83:       put(Length_Of(qqsols),1); new_line;
        !            84:       new_line(file);
        !            85:       put(file,"The number of generating solutions : ");
        !            86:       put(file,Length_Of(qqsols),1); new_line(file);
        !            87:       put("The orbits : "); Symmetry_Group_io.put(orb); new_line;
        !            88:       put(file,"The orbits : "); Symmetry_Group_io.put(file,orb);
        !            89:       new_line(file);
        !            90:     end Write_Orbits;
        !            91:
        !            92:     procedure Driver_for_Bezout_Number ( file : in file_type )  is
        !            93:
        !            94:       timer : timing_widget;
        !            95:       ns : Standard_Natural_Vectors.Vector(p'range);
        !            96:
        !            97:     begin
        !            98:       put_line("Reading the set structure.");
        !            99:       for i in ns'range loop
        !           100:         put("  Give the number of sets for polynomial ");
        !           101:         put(i,1); put(" : ");
        !           102:         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:      -- Set_Structure.B(bs,lpos);
        !           108:       tstart(timer);
        !           109:       bs := Permanent(Degree_Sets_Tables.Create);
        !           110:       tstop(timer);
        !           111:       Write_Results(file,bs);
        !           112:       Write_Results(Standard_Output,bs);
        !           113:       new_line(file);
        !           114:       print_times(file,timer,"computation of generalized permanent");
        !           115:     end Driver_for_Bezout_Number;
        !           116:
        !           117:     procedure Construct_Start_System
        !           118:                  ( file : in file_type; n : in natural;
        !           119:                    allperms : in boolean; v,w : List_of_Permutations;
        !           120:                    notsymmetric,degenerate : out boolean ) is
        !           121:
        !           122:       timer : timing_widget;
        !           123:       notequi,notsym,degen : boolean;
        !           124:
        !           125:     begin
        !           126:       tstart(timer);
        !           127:       if allperms
        !           128:        then Equivariant_Start_System(n,v,notequi);
        !           129:             if notequi
        !           130:              then new_line; new_line(file);
        !           131:                   put_line("The set structure is not equivariant.");
        !           132:                   put_line(file,"The set structure is not equivariant.");
        !           133:              else notsym := false; degen := false;
        !           134:             end if;
        !           135:       end if;
        !           136:       if not allperms or notequi
        !           137:        then Symmetric_Start_System(n,bs,lpos,v,w,notsym,degen);
        !           138:             new_line; new_line(file);
        !           139:             if notsym
        !           140:             then
        !           141:               put_line("The set structure is not symmetric.");
        !           142:               put_line(file,"The set structure is not symmetric.");
        !           143:             else
        !           144:               if degen
        !           145:                then
        !           146:                  put_line("The set structure is symmetric but degenerate.");
        !           147:                  put_line(file,
        !           148:                           "The set structure is symmetric but degenerate.");
        !           149:                else
        !           150:                  put_line("The set structure is symmetric and not degenerate.");
        !           151:                  put_line(file,
        !           152:                           "The set structure is symmetric and not degenerate.");
        !           153:               end if;
        !           154:             end if;
        !           155:       end if;
        !           156:       notsymmetric := notsym;
        !           157:       degenerate := degen;
        !           158:       tstop(timer);
        !           159:       new_line(file);
        !           160:       print_times(file,timer,"construction of symmetric start system");
        !           161:     end Construct_Start_System;
        !           162:
        !           163:     procedure Solve_Start_System
        !           164:                  ( file : in file_type;
        !           165:                    allperms : in boolean; v,w : in List_of_Permutations ) is
        !           166:
        !           167:       timer : timing_widget;
        !           168:       nl : natural;
        !           169:       qq : Poly_Sys(p'range);
        !           170:       qqsols : Solution_List;
        !           171:
        !           172:     begin
        !           173:      -- Random_Product_System_io.put(file,n,2,4,3);
        !           174:       qq := Random_Product_System.Polynomial_System;
        !           175:       new_line(file);
        !           176:       put_line(file,"SYMMETRIC LINEAR-PRODUCT SYSTEM : ");
        !           177:       put_line(file,qq);
        !           178:      -- put_line(file,"The list of positions : "); put(file,lpos);
        !           179:      -- if allperms
        !           180:      --  then Linear_Symmetric_Reduce(lpos,false);
        !           181:      --  else Linear_Symmetric_Reduce(v,w,lpos);
        !           182:      -- end if;
        !           183:       tstart(timer);
        !           184:       if allperms
        !           185:        then lpos := Linear_Symmetric_Reduce(false);
        !           186:        else lpos := Linear_Symmetric_Reduce(v,w);
        !           187:       end if;
        !           188:      -- put_line(file,"The reduced list of positions : "); put(file,lpos);
        !           189:       Random_Product_System.Solve(qqsols,nl,lpos);
        !           190:       tstop(timer);
        !           191:       Random_Product_System.Clear;
        !           192:       if allperms
        !           193:        then qqsols := Generating(qqsols,false,tol);
        !           194:        else Analyze(v,false,tol,qqsols);
        !           195:       end if;
        !           196:       Save_Results(qq,qqsols);
        !           197:       new_line(file);
        !           198:       put_line(file,"THE GENERATING SOLUTIONS :");
        !           199:       new_line(file);
        !           200:       put(file,Length_Of(qqsols),Head_Of(qqsols).n,qqsols);
        !           201:       Write_Orbits(file,qqsols);
        !           202:       new_line(file);
        !           203:       print_times(file,timer,"solving the linear-product system");
        !           204:       q := qq; qsols := qqsols;
        !           205:     end Solve_Start_System;
        !           206:
        !           207:     procedure Driver_for_Start_System
        !           208:                  ( file : in file_type; n : in natural;
        !           209:                    allperms : in boolean; v,w : List_of_Permutations ) is
        !           210:
        !           211:       ans : character;
        !           212:       notsym,degen : boolean;
        !           213:
        !           214:     begin
        !           215:       new_line;
        !           216:       put("Do you want a symmetric linear-product start system ? ");
        !           217:       Ask_Yes_or_No(ans);
        !           218:       if ans = 'y'
        !           219:        then
        !           220:          Construct_Start_System(file,n,allperms,v,w,notsym,degen);
        !           221:          -- new_line(file); Write_Covering(file); new_line(file);
        !           222:          -- new_line(file); Write_Templates(file,n); new_line(file);
        !           223:          --  Symmetric_Set_Structure.Clear;
        !           224:          Set_Structure.Clear;
        !           225:          if not notsym and not degen
        !           226:           then Solve_Start_System(file,allperms,v,w);
        !           227:          end if;
        !           228:       end if;
        !           229:     end Driver_for_Start_System;
        !           230:
        !           231:     procedure Main_Driver is
        !           232:
        !           233:       totaltimer : timing_widget;
        !           234:       n : natural := p'length;
        !           235:       allperms,notsym,inva,equi : boolean;
        !           236:       g,v,w : List_of_Permutations;
        !           237:
        !           238:     begin
        !           239:       new_line(file);
        !           240:       put_line(file,"SYMMETRIC SET STRUCTURE ANALYSIS :");
        !           241:       new_line(file);
        !           242:       Read_Permutation_Group(n,g,v,allperms);
        !           243:       tstart(totaltimer);
        !           244:       put_line(file,"THE SYMMETRY GROUP :");
        !           245:       new_line(file);
        !           246:       put_line(file,"v:"); Symbolic_Symmetry_Group_io.put(file,v);
        !           247:       new_line(file);
        !           248:       Act(v,p,w,notsym,inva,equi);
        !           249:       new_line(file);
        !           250:       put_line(file,"w:"); Symmetry_Group_io.put(file,w); new_line(file);
        !           251:       if notsym
        !           252:        then put_line("The system is not (G,V,W)-symmetric.");
        !           253:             put_line(file,"The system is not (G,V,W)-symmetric.");
        !           254:        else put_line("The system is (G,V,W)-symmetric.");
        !           255:             put_line(file,"The system is (G,V,W)-symmetric.");
        !           256:             if Set_Structure.Empty
        !           257:              then Driver_for_Bezout_Number(file);
        !           258:             end if;
        !           259:             if not Set_Structure.Empty
        !           260:              then Driver_for_Start_System(file,n,allperms,v,w);
        !           261:             end if;
        !           262:       end if;
        !           263:       tstop(totaltimer);
        !           264:       new_line(file);
        !           265:       print_times(file,totaltimer,"symmetric set structure analysis");
        !           266:     end Main_Driver;
        !           267:
        !           268:   begin
        !           269:     Main_Driver;
        !           270:   end Driver_for_Symmetric_Random_Product_Systems;
        !           271:
        !           272: end Driver_for_Symmetric_Set_Structure;

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