aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/e04agents.spad.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/e04agents.spad.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/e04agents.spad.pamphlet')
-rw-r--r--src/algebra/e04agents.spad.pamphlet313
1 files changed, 313 insertions, 0 deletions
diff --git a/src/algebra/e04agents.spad.pamphlet b/src/algebra/e04agents.spad.pamphlet
new file mode 100644
index 00000000..b001d080
--- /dev/null
+++ b/src/algebra/e04agents.spad.pamphlet
@@ -0,0 +1,313 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra e04agents.spad}
+\author{Brian Dupee}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{package E04AGNT e04AgentsPackage}
+<<package E04AGNT e04AgentsPackage>>=
+)abbrev package E04AGNT e04AgentsPackage
+++ Author: Brian Dupee
+++ Date Created: February 1996
+++ Date Last Updated: June 1996
+++ Basic Operations: simple? linear?, quadratic?, nonLinear?
+++ Description:
+++ \axiomType{e04AgentsPackage} is a package of numerical agents to be used
+++ to investigate attributes of an input function so as to decide the
+++ \axiomFun{measure} of an appropriate numerical optimization routine.
+MDF ==> Matrix DoubleFloat
+VEDF ==> Vector Expression DoubleFloat
+EDF ==> Expression DoubleFloat
+EFI ==> Expression Fraction Integer
+PFI ==> Polynomial Fraction Integer
+FI ==> Fraction Integer
+F ==> Float
+DF ==> DoubleFloat
+OCDF ==> OrderedCompletion DoubleFloat
+LOCDF ==> List OrderedCompletion DoubleFloat
+LEDF ==> List Expression DoubleFloat
+PDF ==> Polynomial DoubleFloat
+LDF ==> List DoubleFloat
+INT ==> Integer
+NNI ==> NonNegativeInteger
+LS ==> List Symbol
+EF2 ==> ExpressionFunctions2
+NOA ==> Record(fn:EDF, init:LDF, lb:LOCDF, cf:LEDF, ub:LOCDF)
+LSA ==> Record(lfn:LEDF, init:LDF)
+
+e04AgentsPackage(): E == I where
+ E ==> with
+ finiteBound:(LOCDF,DF) -> LDF
+ ++ finiteBound(l,b) repaces all instances of an infinite entry in
+ ++ \axiom{l} by a finite entry \axiom{b} or \axiom{-b}.
+ sortConstraints:NOA -> NOA
+ ++ sortConstraints(args) uses a simple bubblesort on the list of
+ ++ constraints using the degree of the expression on which to sort.
+ ++ Of course, it must match the bounds to the constraints.
+ sumOfSquares:EDF -> Union(EDF,"failed")
+ ++ sumOfSquares(f) returns either an expression for which the square is
+ ++ the original function of "failed".
+ splitLinear:EDF -> EDF
+ ++ splitLinear(f) splits the linear part from an expression which it
+ ++ returns.
+ simpleBounds?:LEDF -> Boolean
+ ++ simpleBounds?(l) returns true if the list of expressions l are
+ ++ simple.
+ linear?:LEDF -> Boolean
+ ++ linear?(l) returns true if all the bounds l are either linear or
+ ++ simple.
+ linear?:EDF -> Boolean
+ ++ linear?(e) tests if \axiom{e} is a linear function.
+ linearMatrix:(LEDF, NNI) -> MDF
+ ++ linearMatrix(l,n) returns a matrix of coefficients of the linear
+ ++ functions in \axiom{l}. If l is empty, the matrix has at least one
+ ++ row.
+ linearPart:LEDF -> LEDF
+ ++ linearPart(l) returns the list of linear functions of \axiom{l}.
+ nonLinearPart:LEDF -> LEDF
+ ++ nonLinearPart(l) returns the list of non-linear functions of \axiom{l}.
+ quadratic?:EDF -> Boolean
+ ++ quadratic?(e) tests if \axiom{e} is a quadratic function.
+ variables:LSA -> LS
+ ++ variables(args) returns the list of variables in \axiom{args.lfn}
+ varList:(EDF,NNI) -> LS
+ ++ varList(e,n) returns a list of \axiom{n} indexed variables with name
+ ++ as in \axiom{e}.
+ changeNameToObjf:(Symbol,Result) -> Result
+ ++ changeNameToObjf(s,r) changes the name of item \axiom{s} in \axiom{r}
+ ++ to objf.
+ expenseOfEvaluation:LSA -> F
+ ++ expenseOfEvaluation(o) returns the intensity value of the
+ ++ cost of evaluating the input set of functions. This is in terms
+ ++ of the number of ``operational units''. It returns a value
+ ++ in the range [0,1].
+ optAttributes:Union(noa:NOA,lsa:LSA) -> List String
+ ++ optAttributes(o) is a function for supplying a list of attributes
+ ++ of an optimization problem.
+
+ I ==> add
+
+ import ExpertSystemToolsPackage, ExpertSystemContinuityPackage
+
+ sumOfSquares2:EFI -> Union(EFI,"failed")
+ nonLinear?:EDF -> Boolean
+ finiteBound2:(OCDF,DF) -> DF
+ functionType:EDF -> String
+
+ finiteBound2(a:OCDF,b:DF):DF ==
+ not finite?(a) =>
+ positive?(a) => b
+ -b
+ retract(a)@DF
+
+ finiteBound(l:LOCDF,b:DF):LDF == [finiteBound2(i,b) for i in l]
+
+ sortConstraints(args:NOA):NOA ==
+ Args := copy args
+ c:LEDF := Args.cf
+ l:LOCDF := Args.lb
+ u:LOCDF := Args.ub
+ m:INT := (# c) - 1
+ n:INT := (# l) - m
+ for j in m..1 by -1 repeat
+ for i in 1..j repeat
+ s:EDF := c.i
+ t:EDF := c.(i+1)
+ if linear?(t) and (nonLinear?(s) or quadratic?(s)) then
+ swap!(c,i,i+1)$LEDF
+ swap!(l,n+i-1,n+i)$LOCDF
+ swap!(u,n+i-1,n+i)$LOCDF
+ Args
+
+ changeNameToObjf(s:Symbol,r:Result):Result ==
+ a := remove!(s,r)$Result
+ a case Any =>
+ insert!([objf@Symbol,a],r)$Result
+ r
+ r
+
+ sum(a:EDF,b:EDF):EDF == a+b
+
+ variables(args:LSA): LS == variables(reduce(sum,(args.lfn)))
+
+ sumOfSquares(f:EDF):Union(EDF,"failed") ==
+ e := edf2efi(f)
+ s:Union(EFI,"failed") := sumOfSquares2(e)
+ s case EFI =>
+ map(fi2df,s)$EF2(FI,DF)
+ "failed"
+
+ sumOfSquares2(f:EFI):Union(EFI,"failed") ==
+ p := retractIfCan(f)@Union(PFI,"failed")
+ p case PFI =>
+ r := squareFreePart(p)$PFI
+ (p=r)@Boolean => "failed"
+ tp := totalDegree(p)$PFI
+ tr := totalDegree(r)$PFI
+ t := tp quo tr
+ found := false
+ q := r
+ for i in 2..t by 2 repeat
+ s := q**2
+ (s=p)@Boolean =>
+ found := true
+ leave
+ q := r**i
+ if found then
+ q :: EFI
+ else
+ "failed"
+ "failed"
+
+ splitLinear(f:EDF):EDF ==
+ out := 0$EDF
+ (l := isPlus(f)$EDF) case LEDF =>
+ for i in l repeat
+ if not quadratic? i then
+ out := out + i
+ out
+ out
+
+ edf2pdf(f:EDF):PDF == (retract(f)@PDF)$EDF
+
+ varList(e:EDF,n:NNI):LS ==
+ s := name(first(variables(edf2pdf(e))$PDF)$LS)$Symbol
+ [subscript(s,[t::OutputForm]) for t in expand([1..n])$Segment(Integer)]
+
+ functionType(f:EDF):String ==
+ n := #(variables(f))$EDF
+ p := (retractIfCan(f)@Union(PDF,"failed"))$EDF
+ p case PDF =>
+ d := totalDegree(p)$PDF
+-- one?(n*d) => "simple"
+ (n*d) = 1 => "simple"
+-- one?(d) => "linear"
+ (d = 1) => "linear"
+ (d=2)@Boolean => "quadratic"
+ "non-linear"
+ "non-linear"
+
+ simpleBounds?(l: LEDF):Boolean ==
+ a := true
+ for e in l repeat
+ not (functionType(e) = "simple")@Boolean =>
+ a := false
+ leave
+ a
+
+ simple?(e:EDF):Boolean == (functionType(e) = "simple")@Boolean
+
+ linear?(e:EDF):Boolean == (functionType(e) = "linear")@Boolean
+
+ quadratic?(e:EDF):Boolean == (functionType(e) = "quadratic")@Boolean
+
+ nonLinear?(e:EDF):Boolean == (functionType(e) = "non-linear")@Boolean
+
+ linear?(l: LEDF):Boolean ==
+ a := true
+ for e in l repeat
+ s := functionType(e)
+ (s = "quadratic")@Boolean or (s = "non-linear")@Boolean =>
+ a := false
+ leave
+ a
+
+ simplePart(l:LEDF):LEDF == [i for i in l | simple?(i)]
+
+ linearPart(l:LEDF):LEDF == [i for i in l | linear?(i)]
+
+ nonLinearPart(l:LEDF):LEDF ==
+ [i for i in l | not linear?(i) and not simple?(i)]
+
+ linearMatrix(l:LEDF, n:NNI):MDF ==
+ empty?(l) => mat([],n)
+ L := linearPart l
+ M := zero(max(1,# L)$NNI,n)$MDF
+ vars := varList(first(l)$LEDF,n)
+ row:INT := 1
+ for a in L repeat
+ for j in monomials(edf2pdf(a))$PDF repeat
+ col:INT := 1
+ for c in vars repeat
+ if ((first(variables(j)$PDF)$LS)=c)@Boolean then
+ M(row,col):= first(coefficients(j)$PDF)$LDF
+ col := col+1
+ row := row + 1
+ M
+
+ expenseOfEvaluation(o:LSA):F ==
+ expenseOfEvaluation(vector(copy o.lfn)$VEDF)
+
+ optAttributes(o:Union(noa:NOA,lsa:LSA)):List String ==
+ o case noa =>
+ n := o.noa
+ s1:String := "The object function is " functionType(n.fn)
+ if empty?(n.lb) then
+ s2:String := "There are no bounds on the variables"
+ else
+ s2:String := "There are simple bounds on the variables"
+ c := n.cf
+ if empty?(c) then
+ s3:String := "There are no constraint functions"
+ else
+ t := #(c)
+ lin := #(linearPart(c))
+ nonlin := #(nonLinearPart(c))
+ s3:String := "There are " string(lin)$String " linear and "_
+ string(nonlin)$String " non-linear constraints"
+ [s1,s2,s3]
+ l := o.lsa
+ s:String := "non-linear"
+ if linear?(l.lfn) then
+ s := "linear"
+ ["The object functions are " s]
+
+@
+\section{License}
+<<license>>=
+--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+--All rights reserved.
+--
+--Redistribution and use in source and binary forms, with or without
+--modification, are permitted provided that the following conditions are
+--met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in
+-- the documentation and/or other materials provided with the
+-- distribution.
+--
+-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+-- names of its contributors may be used to endorse or promote products
+-- derived from this software without specific prior written permission.
+--
+--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+@
+<<*>>=
+<<license>>
+
+<<package E04AGNT e04AgentsPackage>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}