Advertisement
Guest User

Untitled

a guest
Apr 24th, 2015
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.75 KB | None | 0 0
  1. open System
  2.  
  3. [<EntryPoint>]
  4. let main argv =
  5.  
  6.     let a, n, e, size = 1.0, 0.5, 0.1, 2
  7.  
  8.     let r = new Random()
  9.     let mutable w : double array = [| for i = 0 to size do yield r.NextDouble() |]
  10.  
  11.     let Activ (s : double) : double = 1.0 / (1.0 + Math.E ** (-a * s))
  12.     let Push (x : int array, w : double array) : double =
  13.         let mutable s = 0.0
  14.         for i = 0 to w.Length do
  15.             s <- s + Convert.ToDouble(x.[i]) * w.[i]
  16.         Activ s
  17.  
  18.     let mutable xin = Array.create (size + 1) 0
  19.     xin.[xin.Length - 1] <- 1
  20.  
  21.     let mutable sin = Array.create 4 (Array.create 2 (r.Next(0, 1)))
  22.     let mutable sout = Array.create 4 (r.Next(0, 1))
  23.  
  24.     let CheckE (x : double array, ee : double) : bool =
  25.         let mutable res = true
  26.         for i in x do
  27.             if Math.Abs(i) > ee then
  28.                 res <- false
  29.         res
  30.  
  31.     let mutable iter = 0
  32.     let mutable E & O = Array.create 4 0.0
  33.     let mutable d = 0.0
  34.     let max = 100
  35.  
  36.     let CheckO : bool =
  37.         let mutable res = true
  38.         for i = 0 to sin.Length do
  39.             xin.[0] <- sin.[i].[0]
  40.             xin.[1] <- sin.[i].[1]
  41.             O.[i] <- Push(xin, w)
  42.             E.[i] <- (O.[i] - Convert.ToDouble(sout.[i])) ** 2.0 / 2.0
  43.         res = CheckE(E, e)
  44.  
  45.     CheckO
  46.  
  47.     while not (CheckE (E, e)) do
  48.         while iter < max do
  49.             for i in 0..3 do
  50.                 xin.[0] <- sin.[i].[0]
  51.                 xin.[1] <- sin.[i].[1]
  52.  
  53.                 d <- (O.[i] - Convert.ToDouble(sout.[i])) * O.[i] * (1.0 - O.[i])
  54.                 for j in 0..size do
  55.                     w.[j] <- w.[j] + (-1.0 * n * d * Convert.ToDouble(xin.[j]))
  56.                        
  57.  
  58.  
  59.     printf "%A\n%A\n%A" sin sout w
  60.     let pause = Console.Read()
  61.     0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement