Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System
- [<EntryPoint>]
- let main argv =
- let a, n, e, size = 1.0, 0.5, 0.1, 2
- let r = new Random()
- let mutable w : double array = [| for i = 0 to size do yield r.NextDouble() |]
- let Activ (s : double) : double = 1.0 / (1.0 + Math.E ** (-a * s))
- let Push (x : int array, w : double array) : double =
- let mutable s = 0.0
- for i = 0 to w.Length do
- s <- s + Convert.ToDouble(x.[i]) * w.[i]
- Activ s
- let mutable xin = Array.create (size + 1) 0
- xin.[xin.Length - 1] <- 1
- let mutable sin = Array.create 4 (Array.create 2 (r.Next(0, 1)))
- let mutable sout = Array.create 4 (r.Next(0, 1))
- let CheckE (x : double array, ee : double) : bool =
- let mutable res = true
- for i in x do
- if Math.Abs(i) > ee then
- res <- false
- res
- let mutable iter = 0
- let mutable E & O = Array.create 4 0.0
- let mutable d = 0.0
- let max = 100
- let CheckO : bool =
- let mutable res = true
- for i = 0 to sin.Length do
- xin.[0] <- sin.[i].[0]
- xin.[1] <- sin.[i].[1]
- O.[i] <- Push(xin, w)
- E.[i] <- (O.[i] - Convert.ToDouble(sout.[i])) ** 2.0 / 2.0
- res = CheckE(E, e)
- CheckO
- while not (CheckE (E, e)) do
- while iter < max do
- for i in 0..3 do
- xin.[0] <- sin.[i].[0]
- xin.[1] <- sin.[i].[1]
- d <- (O.[i] - Convert.ToDouble(sout.[i])) * O.[i] * (1.0 - O.[i])
- for j in 0..size do
- w.[j] <- w.[j] + (-1.0 * n * d * Convert.ToDouble(xin.[j]))
- printf "%A\n%A\n%A" sin sout w
- let pause = Console.Read()
- 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement