Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  iterative_methods.gi   Sprache: unbekannt

 
Spracherkennung für: .gi vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#############################################################################
##
#W  iterative_methods.gi                         Victor Bovdi <vbovdi@gmail.com>
#W                                       Vasyl Laver  <vasyllaver@uzhnu.edu.ua>
##
##
#Y  Copyright (C)  2018,  UAE University, UAE
##
#############################################################################
##
##  This file contains some iterative methods for threshold element training.
##
#############################################################################


######################################################################
##
#F  ThresholdElementTraining(te,step,f)
##
##  Returns the Threshold Element realizing the Boolean function f
##  or [] if the function is not realizable.
##

InstallMethod(ThresholdElementTraining, "threshold element, step, function, max_iter", true, [IsThresholdElementObj, IsPosInt, IsObject, IsPosInt], 4,
function(te,step,f,maxit)
local t, l, i,y,err,j,tup,w,T,st, niter, n;

 if (IsLogicFunction(f)=false) then
  Error("f has to be a logic function.");
 fi;

 n:=f!.numvars;

 if (f!.dimension<>2) then
  Error("f has to be a Boolean function.");
 fi;

 f:=f!.output;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 st:=StructureOfThresholdElement(te);
 w:=st[1]; T:=st[2];

 if (Size(w)<>n) then
  Error("Theshold element and f should be of one dimension!\n");
 fi;

 if w=[] then
  for i in [1..LogInt(Size(f),2)+1] do Add(w,1); od;
 fi;
 l:=ShallowCopy(w);
 niter:=maxit;
 return THELMA_INTERNAL_ThrTr(l,T,step,f,niter);
end);


InstallOtherMethod(ThresholdElementTraining, "threshold element, step, function, max_iter", true, [IsThresholdElementObj, IsPosInt, IsFFECollection, IsPosInt], 4,
function(te,step,f,maxit)
local t, l, i,y,err,j,tup,w,T,st, niter, n;

 n:=LogInt(Size(f),2);
 if Size(f)<>2^n then
   Error("Number of elements of the vector must be a power of 2! \n");
   return [];
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 st:=StructureOfThresholdElement(te);
 w:=st[1]; T:=st[2];

 if (Size(w)<>n) then
  Error("Theshold element and f should be of one dimension!\n");
 fi;

 f:=List(f,Order);

 if w=[] then
  for i in [1..LogInt(Size(f),2)+1] do Add(w,1); od;
 fi;
 l:=ShallowCopy(w);
 niter:=maxit;
 return THELMA_INTERNAL_ThrTr(l,T,step,f,niter);
end);

#f - is a polynomial over GF(2)
InstallOtherMethod(ThresholdElementTraining, "threshold element, step, function, max_iter", true, [IsThresholdElementObj, IsPosInt, IsPolynomial, IsPosInt], 4,
function(te,step,f1,maxit)
local t, l, i,y,err,j,tup,w,T,st, niter,f, var, n;
 st:=StructureOfThresholdElement(te);
 w:=st[1]; T:=st[2];
 f:=[];

 n:=Size(w);

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 f:=THELMA_INTERNAL_PolToOneZero(f1,n);
 if w=[] then
  for i in [1..LogInt(Size(f),2)+1] do Add(w,1); od;
 fi;

 l:=ShallowCopy(w);
 niter:=maxit;

 if (Size(f)<>2^n) then
  Error("Theshold element and f should be of one dimension!\n");
 fi;

 return THELMA_INTERNAL_ThrTr(l,T,step,f,niter);
end);

#f - string
InstallOtherMethod(ThresholdElementTraining, "threshold element, step, function, max_iter", true, [IsThresholdElementObj, IsPosInt, IsString, IsPosInt], 4,
function(te,step,f1,maxit)
local t, l, i,y,err,j,tup,w,T,st, niter,f, n;
 st:=StructureOfThresholdElement(te);
 w:=st[1]; T:=st[2];
 f:=[];

 n:=LogInt(Size(f1),2);
 if Size(f1)<>2^n then
     Error("Number of elements of the vector must be a power of 2");
  return [];
 fi;

 if 2^n<>(Size(Positions(f1,'1'))+Size(Positions(f1,'0'))) then
  Error("Input string should contain only '1' and '0'. \n");
  return [];
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 if (Size(w)<>n) then
   Error("Theshold element and f should be of one dimension!\n");
 fi;

 for i in [1..Size(f1)] do
  if f1[i]='1' then Add(f, 1);
  elif f1[i]='0' then Add(f, 0);
  fi;
 od;

 if w=[] then
  for i in [1..LogInt(Size(f),2)+1] do Add(w,1); od;
 fi;
 l:=ShallowCopy(w);
 niter:=maxit;
 return THELMA_INTERNAL_ThrTr(l,T,step,f,niter);
end);

######################################################################
##
#F  ThresholdElementBatchTraining(te,step,f)
##
##  Returns the Threshold Element realizing the Boolean function f
##  or [] if the function is not realizable.
##

#f - vector over GF(2)
InstallMethod(ThresholdElementBatchTraining, "threshold element, step, function, max_iter", true, [IsThresholdElementObj, IsPosInt, IsObject, IsPosInt], 4,
function(te,step,f, maxit)
local t, l, i, y,err,j,Tc,wc,tup,st,w,T,niter,n;

 st:=StructureOfThresholdElement(te);
 w:=st[1];
 T:=st[2];

 if (IsLogicFunction(f)=false) then
  Error("f has to be a logic function.");
 fi;

 n:=f!.numvars;

 if (f!.dimension<>2) then
  Error("f has to be a Boolean function.");
 fi;

 f:=f!.output;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 if w=[] then
  for i in [1..LogInt(Size(f),2)+1] do Add(w,1); od;
 fi;
 l:=ShallowCopy(w);

 if (Size(w)<>n) then
  Error("Theshold element and f should be of one dimension!\n");
 fi;

 niter:=maxit;
 return THELMA_INTERNAL_ThrBatchTr(l,T,step,f,niter);
end);


InstallOtherMethod(ThresholdElementBatchTraining, "threshold element, step, function, max_iter", true, [IsThresholdElementObj, IsPosInt, IsFFECollection, IsPosInt], 4,
function(te,step,f, maxit)
local t, l, i, y,err,j,Tc,wc,tup,st,w,T,niter,n;

 st:=StructureOfThresholdElement(te);
 w:=st[1];
 T:=st[2];
 f:=List(f,Order);
 n:=LogInt(Size(f),2);

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 if w=[] then
  for i in [1..LogInt(Size(f),2)+1] do Add(w,1); od;
 fi;
 l:=ShallowCopy(w);

 if (Size(w)<>n) then
  Error("Theshold element and f should be of one dimension!\n");
 fi;

 niter:=maxit;
 return THELMA_INTERNAL_ThrBatchTr(l,T,step,f,niter);
end);

# f is a polynomial
InstallOtherMethod(ThresholdElementBatchTraining, "threshold element, step, function, max_iter", true, [IsThresholdElementObj, IsPosInt, IsPolynomial, IsPosInt], 4,
function(te,step,f1,maxit)
local t, l, i, y,err,j,Tc,wc,tup,st,w,T,niter, var, n, f;

 st:=StructureOfThresholdElement(te);
 w:=st[1]; T:=st[2];
 f:=[];

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 var:=OccuringVariableIndices(f1);
 n:=Size(w);

 f:=THELMA_INTERNAL_PolToOneZero(f1,n);

 if w=[] then
  for i in [1..LogInt(Size(f),2)+1] do Add(w,1); od;
 fi;
 l:=ShallowCopy(w);
 niter:=maxit;

 if (LogInt(Size(f),2)<>n) then
  Error("Theshold element and f should be of one dimension!\n");
 fi;

 return THELMA_INTERNAL_ThrBatchTr(l,T,step,f,niter);
end);

#f is a string
InstallOtherMethod(ThresholdElementBatchTraining, "threshold element, step, function, max_iter", true, [IsThresholdElementObj, IsPosInt, IsString, IsPosInt], 4,
function(te,step,f1, maxit)
local t, l, i, y,err,j,Tc,wc,tup,st,w,T,niter,f,n;

 st:=StructureOfThresholdElement(te);
 w:=st[1]; T:=st[2];
 f:=[];

 n:=LogInt(Size(f1),2);

 if (Size(w)<>n) then
  Error("Theshold element and f should be of one dimension!\n");
 fi;

 if Size(f1)<>2^n then
     Error("Number of elements of the vector must be a power of 2");
  return [];
 fi;

 if 2^n<>(Size(Positions(f1,'1'))+Size(Positions(f1,'0'))) then
  Error("Input string should contain only '1' and '0'. \n");
  return [];
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 for i in [1..Size(f1)] do
  if f1[i]='1' then Add(f, 1);
  elif f1[i]='0' then Add(f, 0);
  fi;
 od;

 if w=[] then
  for i in [1..LogInt(Size(f),2)+1] do Add(w,1); od;
 fi;
 l:=ShallowCopy(w);
 niter:=maxit;
 return THELMA_INTERNAL_ThrBatchTr(l,T,step,f,niter);
end);

######################################################################
##
#F  WinnowAlgorithm(f,step)
##  The algorithm for learing the monotone disjunctions
##

#f - vector over GF(2)
InstallMethod(WinnowAlgorithm, "function, step, maxiter", true, [IsObject, IsPosInt, IsPosInt], 3,
function(f,step,maxit)
local f1,niter;

 if step=1 then
  Error("Step must be integer > 1. \n");
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 if (IsLogicFunction(f)=false) then
  Error("f has to be a logic function.");
 fi;

 if (f!.dimension<>2) then
  Error("f has to be a Boolean function.");
 fi;

 f1:=f!.output;

 niter:=maxit;
 return THELMA_INTERNAL_Winnow(f1,step,niter);
end);


InstallOtherMethod(WinnowAlgorithm, "function, step, maxiter", true, [IsFFECollection, IsPosInt, IsPosInt], 3,
function(f,step,maxit)
local f1,niter;

 if step=1 then
  Error("Step must be integer > 1. \n");
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 f1:=List(f,Order);
 niter:=maxit;
 return THELMA_INTERNAL_Winnow(f1,step,niter);
end);

#f - string
InstallOtherMethod(WinnowAlgorithm, "function, step, maxiter", true, [IsString, IsPosInt, IsPosInt], 3,
function(f,step, maxit)
local f1,niter,n,i;

 f1:=[];

 n:=LogInt(Size(f),2);
 if Size(f)<>2^n then
     Error("Number of elements of the vector must be a power of 2");
  return [];
 fi;

 if 2^n<>(Size(Positions(f,'1'))+Size(Positions(f,'0'))) then
  Error("Input string should contain only '1' and '0'. \n");
  return [];
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 for i in [1..Size(f)] do
  if f[i]='1' then Add(f1, 1);
  elif f[i]='0' then Add(f1, 0);
  fi;
 od;


 if step=1 then
  Error("Step must be integer > 1. \n");
 fi;

 niter:=maxit;
 return THELMA_INTERNAL_Winnow(f1,step,niter);
end);

#f - polynomial
InstallOtherMethod(WinnowAlgorithm, "function, step, maxiter", true, [IsPolynomial, IsPosInt, IsPosInt], 3,
function(f,step,maxit)
local f1,niter,var,n;

 var:=OccuringVariableIndices(f);
 n:=InputFromUser("Enter the number of variables (n>=",Size(var),"):\n");

 f1:=THELMA_INTERNAL_PolToOneZero(f,n);

 if step=1 then
  Error("Step must be integer > 1. \n");
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 niter:=maxit;
 return THELMA_INTERNAL_Winnow(f1,step,niter);
end);

######################################################################
##
#F  Winnow2Algorithm(f,step)
##  The algorithm, which generalizaes Winnow1
##

#f - vector over GF(2)
InstallMethod(Winnow2Algorithm, "function, step, maxiter", true, [IsObject, IsPosInt, IsPosInt], 3,
function(f,step,maxit)
local f1,niter;

 if step=1 then
  Error("Step must be integer > 1. \n");
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 if (IsLogicFunction(f)=false) then
  Error("f has to be a logic function.");
 fi;

 if (f!.dimension<>2) then
  Error("f has to be a Boolean function.");
 fi;

 f1:=f!.output;

 niter:=maxit;
 return THELMA_INTERNAL_Winnow2(f1,step,niter);
end);

InstallOtherMethod(Winnow2Algorithm, "function, step, maxiter", true, [IsFFECollection, IsPosInt, IsPosInt], 3,
function(f,step,maxit)
local f1,niter;

 if step=1 then
  Error("Step must be integer > 1. \n");
 fi;

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 f1:=List(f,Order);
 niter:=maxit;
 return THELMA_INTERNAL_Winnow2(f1,step,niter);
end);

#f - string
InstallOtherMethod(Winnow2Algorithm, "function, step, maxiter", true, [IsString, IsPosInt, IsPosInt], 3,
function(f,step,maxit)
local f1,niter,n,i;

 f1:=[];

 n:=LogInt(Size(f),2);
 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 if Size(f)<>2^n then
     Error("Number of elements of the vector must be a power of 2");
  return [];
 fi;

 if 2^n<>(Size(Positions(f,'1'))+Size(Positions(f,'0'))) then
  Error("Input string should contain only '1' and '0'. \n");
  return [];
 fi;

 for i in [1..Size(f)] do
  if f[i]='1' then Add(f1, 1);
  elif f[i]='0' then Add(f1, 0);
  fi;
 od;

 if step=1 then
  Error("Step must be integer > 1. \n");
 fi;

 niter:=maxit;
 return THELMA_INTERNAL_Winnow2(f1,step,niter);
end);

#f - polynomial
InstallOtherMethod(Winnow2Algorithm, "function, step, max_iter", true, [IsPolynomial, IsPosInt, IsPosInt], 3,
function(f,step,maxit)
local f1,niter,var,n;

 var:=OccuringVariableIndices(f);
 n:=InputFromUser("Enter the number of variables (n>=",Size(var),"):\n");

 if step<1 then
  Error("Step has to be a positive integer!\n");
  return [];
 fi;

 if maxit<1 then
  Error("Maximal number of iterations has to be a positive integer!\n");
  return [];
 fi;

 f1:=THELMA_INTERNAL_PolToOneZero(f,n);

 if step=1 then
  Error("Step must be integer > 1. \n");
 fi;

 niter:=maxit;
 return THELMA_INTERNAL_Winnow2(f1,step,niter);
end);

######################################################################
##
#F  STESynthesis(f,step)
##  The algorithm, which generalizaes Winnow1
##

#Build threshold element (find w and T). Input - f with values from GF(2), output - structure vector (w;T) in [0,1] base;
#if such vector does not exist - return [].


#f - vector over GF(2)
InstallMethod(STESynthesis, "function", true, [IsObject], 1,
function(f)
 local n,i;

 if (IsLogicFunction(f)=false) then
  Error("f has to be a logic function.");
 fi;

 if (f!.dimension<>2) then
  Error("f has to be a Boolean function.");
 fi;

 f:=List(f!.output,i->Elements(GF(2))[i+1]);

 return THELMA_INTERNAL_STESynthesis(f);
end);

InstallOtherMethod(STESynthesis, "function", true, [IsFFECollection], 1,
function(f)
 local n;
 n:=LogInt(Size(f),2);
 if Size(f)<>2^n then
     Error("Number of elements of the vector must be a power of 2");
  return [];
 fi;

 return THELMA_INTERNAL_STESynthesis(f);
end);

#f - string
InstallOtherMethod(STESynthesis, "function", true, [IsString], 1,
function(f)
 local i,f1,n;

  n:=LogInt(Size(f),2);
  if Size(f)<>2^n then
      Error("Number of elements of the vector must be a power of 2");
   return [];
  fi;

  if 2^n<>(Size(Positions(f,'1'))+Size(Positions(f,'0'))) then
   Error("Input string should contain only '1' and '0'. \n");
   return [];
  fi;
   f1:=[];
   for i in [1..Size(f)] do
     if f[i]='1' then Add(f1, Z(2)^0);
     elif f[i]='0' then Add(f1, 0*Z(2));
     fi;
   od;

  return THELMA_INTERNAL_STESynthesis(f1);
end);

#f - polynomial
InstallOtherMethod(STESynthesis, "function", true, [IsPolynomial], 1,
function(f)
local f1,var,n;

 var:=OccuringVariableIndices(f);
 n:=InputFromUser("Enter the number of variables (n>=",Size(var),"):\n");
 f1:=THELMA_INTERNAL_PolToGF2(f,n);
 return THELMA_INTERNAL_STESynthesis(f1);
end);

[ Dauer der Verarbeitung: 0.44 Sekunden  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge