portal Michała Hanćkowiaka
Begin main content
Search · Index
No registered users in community Materiały
in last 10 minutes

ALR - rozszerzenia symulatora

Jak dodać "wagi krawędzi" do symulatora?

# (wykonać to w konsoli po utworzeniu fiberów!)
proc ustaw_wagi {} {
  global sasiedzi liczbaWierz waga
  iterate i $liczbaWierz {
    set ww {}
    foreach s $sasiedzi($i) {
      if {[info exists waga($i,$s)]} {
        set w $waga($i,$s)
      } elseif {[info exists waga($s,$i)]} {
        set w $waga($s,$i)
      } else {
        set w 0
      }
      lappend ww $w
    }
    fiber_eval $i "set wagi {$ww}"
  }
}

set waga(1,3) 10; # waga kraw {1,3}
set waga(1,4) 11
set waga(6,4) 12

ustaw_wagi
  # + tworzy w kazdym fiberze zm. globalną "wagi"
  #   jest to lista z wagami odp. połączeniom z sąsiadami
  # + wagi nie występujące w tabliy waga, w konsoli
  #   mają wagę = 0

fiber_iterate {_puts "($id) $wagi"}
  # test

Jak dostarczyć wszystkie niedostarczone komunikaty w modelu asynchronicznym?
przydatne przy budowaniu egzekucji asynch...

# (wykonać to w konsoli po utworzeniu fiberów!)
proc dostarczWszystkieKom {} {
  fiber_iterate {
    iterate __i $stopien {
      eval lappend kom${__i} [set kom${__i}_pisz]
      set kom${__i}_pisz {}
    }
    unset __i
  }
}

dostarczWszystkieKom; pokazKom
  # test (w symulatorze asynch!)

Jak poradzić sobie z długim czasem ładowania pakietów we wszystkich fiberach?
np. pakietu struct::set z tcllib, do operacji na zbiorach...

# (wykonać to w konsoli po utworzeniu 20 fiberów!)
fiber_iterate {lappend auto_path ./tcllib}; # jeśli to potrzebne
time {fiber_iterate {package re struct::set}}
  #% 15160901 microseconds per iteration
  # + strasznie długo...

# tworzymy aliasy w fiberach do komendy struct::set w konsoli !!
lappend auto_path ./tcllib; # jeśli to potrzebne
package re struct::set
  #% 2.2.3
time {iterate i $liczbaWierz {fiber$i alias struct::set struct::set}}
  #% 639 microseconds per iteration
  # + znacznie szybciej...
fiber_eval 0 {struct::set difference {1 2 3} {3 4 5}}
  #% 1 2
  # + dziala...
  # 22.10.2017, Uwaga: wolno używać tylko met. funkcyjnych (tych BEZ arg. svar) !!!

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...