⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nnuga

📁 一个运用遗传算法来训练神经网络的程序
💻
字号:
#!/usr/local/bin/wish -f##  /*-----------------------------------------------------------------------*\#  |                                                                         |#  |                  Robotics 95  --  Final Course Project                  |#  |                                                                         |#  |                    By :  Omri Weisman & Ziv Pollack                     |#  |                                                                         |#  |               NNUGA - Neural Network Using Genetic Algorithms           |#  |                                                                         |#  \*-----------------------------------------------------------------------*/#  #   File name : nnuga##   NNUGA is a neural network which can learn to classify a set of x:y vectors#   by dividing the plain into regions. The learning method is an evolutionary#   algorithms.##   When the window opens, you can create positive points on the board by clicking#   the left mouse button, and negative points by clicking the right mouse button.#   When you're finished placing points, you can click on the "Start" button to#   allow the network to try and learn your input points, generalize its knowledge,#   and show you the result by drawing the line on the board. The line represents the#   border which seperates the plane into regions - regions where the NN's output#   will be True and regions where the NN's output will be False.##   This file is the Tk interface of the program. It uses a program written in C#   to perform the actual NN learning, and acts as its GUI.##   Constants#set LIMIT 150       ;#  Limit of points allowed#   Main Window#wm title . "NNUGA"wm minsize . 560 550#option add *activeBackground  green  #   Headers#  frame .header1 -borderwidth 5; pack .header1label .header1.l -text "NNUGA - Neural Network Using Genetic Algorithms" ; pack .header1.lframe .header2 -borderwidth 5 ; pack .header2label .header2.l -text "By Omri Weisman and Ziv Pollack" ; pack .header2.l#   Buttons#frame  .buttons -borderwidth 15 ; pack .buttons -side bottom -fill xbutton .buttons.quit -text "  Quit  " -command exitbutton .buttons.start -text "  Start  " -command Startbutton .buttons.clear -text "  Clear  " -command Clearentry  .buttons.mousepos -width 7 -bd 2 -relief raised -textvariable mousepos entry  .buttons.statusbar -width 30 -bd 2 -relief raised -textvariable statuspack   .buttons.start .buttons.clear .buttons.statusbar .buttons.mousepos -side leftpack   .buttons.quit -side right#   The Clipboard#   This is a frame that holds the board and the rulers#frame .clip ; pack .clip#   The Board#   This is the board upon which the points are drawn#canvas .clip.board -width 360 -height 360 -bd 5 -relief raised -bg whitepack .clip.board -anchor ebind .clip.board <Any-Motion>  {set mousepos "%x %y"}   ;#  Show mouse position when movedbind .clip.board <ButtonPress-1> {Button1 %x %y}        ;#  Create positive pointbind .clip.board <ButtonPress-3> {Button3 %x %y}        ;#  Create negative pointbind .clip.board <Leave>  {set mousepos ""}#   Vertical Ruler#   Just a graphic feature#canvas .clip.c1 -width 2.5c -height 11.5cpack .clip.c1 -side left -before .clip.board.clip.c1 create line 1.5c 0c 1c 0c 1c 10c 1.5c 10cfor {set i 0} {$i < 10} {incr i} {  set x [expr $i+0]  .clip.c1 create line 1c ${x}c 1.4c ${x}c  .clip.c1 create line 1c $x.25c 1.2c $x.25c  .clip.c1 create line 1c $x.5c 1.3c $x.5c  .clip.c1 create line 1c $x.75c 1.2c $x.75c  .clip.c1 create text 1.4c $x.4c -text [expr 35*$i] -anchor sw}#   vertical frame on right side,#   to balance with the ruler on the left#frame .clip.c3 -width 2.5c -height 11.5cpack .clip.c3 -side right -before .clip.board  #   Horizental Ruler#   Another graphic feature#canvas .clip.c2 -width 10.1c -height 1.5cpack .clip.c2 -side bottom -after .clip.board.clip.c2 create line 0c 0.5c 0c 1c 10c 1c 10c 0.5cfor {set i 0} {$i < 10} {incr i} {  set x [expr $i+0]  .clip.c2 create line ${x}c 1c ${x}c 0.6c  .clip.c2 create line $x.25c 1c $x.25c 0.8c  .clip.c2 create line $x.5c 1c $x.5c 0.7c  .clip.c2 create line $x.75c 1c $x.75c 0.8c  .clip.c2 create text $x.01c .5c -text [expr 35*$i] -anchor sw}#   Global Variables#set list1 ""      ;#  List of points for which the result should be Trueset list2 ""      ;#  List of points for which the result should be Falseset mark_list ""  ;#  List of graphic marks that should be deleted when "Clear" is requestedset line_list ""  ;#  List of seperator lines that are created after the NN has learntset counter 0     ;#  Counts how many points are there#   Procedure Start#   This procedure starts the calculation. It saves the points to a temporary#   file, calls upon the helper program to perform the actual learning and#   receives its output from the standard output. If the result is 4 numbers,#   they are interpreted as 2 x-y pairs and a line is drawn, otherwise it is#   assumed that some problem occured.#proc Start {} {  global list1 list2 line_list  say "Starting..."  set fileID [open /tmp/nn-input w 0644]        ;#  Write data into file  puts $fileID [expr [llength $list1]/2]  foreach item $list1 { puts $fileID $item }  puts $fileID [expr [llength $list2]/2]  foreach item $list2 { puts $fileID $item }  close $fileID  foreach item $line_list { .clip.board delete $item }  ;# Delete old lines  catch {exec nnuga.out >@ stdout} result               ;# Execute the C program  set fileID [open /tmp/nn-output r]                    ;# Open result file  gets $fileID result  close $fileID  set length [llength $result]  for {set i 0} {$i < $length } {incr i 2} {    lappend line_list [.clip.board create line\                         [lindex $result $i]\                         [lindex $result [expr $i+1]]\                         [expr [lindex $result $i]+1]\                         [expr [lindex $result [expr $i+1]]+1]]    }  say "Finished"  }#   Procedure Button1#   This procedure creates a new positive point at the location x,y when the#   left mouse button is clicked. It also draws a '+' there.#proc Button1 {x y} {  global mark_list list1 counter LIMIT  if { $counter >= $LIMIT } {    say "No more points allowed"  } else {    set line1 [.clip.board create line [expr $x-3] $y [expr $x+4] $y]    set line2 [.clip.board create line $x [expr $y-3] $x [expr $y+4]]    lappend mark_list $line1 $line2    lappend list1 $x $y    incr counter 1    say "Created Positive input at $x:$y"    }  }#   Procedure Button3#   This procedure creates a new negative point at the location x,y when the#   right mouse button is clicked. It also draws a '-' there.#proc Button3 {x y} {  global mark_list list2 counter LIMIT  if { $counter >= $LIMIT } {    say "No more points allowed"  } else {    set line1 [.clip.board create line [expr $x-3] $y [expr $x+4] $y]    lappend mark_list $line1    lappend list2 $x $y    incr counter 1    say "Created Negative input at $x:$y"    }  }#   Procedure Clear#   Clear all marks from the board and reset variables#proc Clear {} {  global list1 list2 mark_list line_list counter  foreach item [concat $mark_list $line_list] { .clip.board delete $item }  set list1 ""  set list2 ""  set mark_list ""  set counter 0  say ""  }#    Procedure Say#    print a message on the status bar.#proc say {message} {  global status  set status $message  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -