2016-08-08 22 views
1

Ich möchte Zellteilung in Netlogo programmieren. Ich habe es so programmiert, dass die Zellen sich mit einer Wahrscheinlichkeit teilen. Dies ergibt eine spezifische stochastische Funktion, die ich nicht stören werde.Netlogo - mehr als eine Schildkröte pro Patch

Um es so real wie möglich zu machen, möchte ich nicht mehrere Zellen auf dem gleichen Patch sein. Ich habe es geschafft, dies zu programmieren, indem ich einige Zellen sterben ließ, wenn sie in der Nähe keinen leeren Platz fanden. ABER das beeinflusst die stochastische Funktion, weil mehr Zellen sterben als sterben sollen.

Einige Hilfe würde sehr geschätzt werden.

Mein Code zur Klarstellung:

to mitosis 

ask stemcells [ 
if random-float (2 * r * lambda) < 2 * r * lambda [ 
ifelse random-float 1. < probability 
[ hatch 1 [ 

let free-neighbor one-of neighbors with [not any? turtles-here] 
ifelse free-neighbor != nobody [ 
move-to free-neighbor] 
[ die] ] 
set breed stemcells 
] [ die ] ] ] 

Antwort

1

Es sieht aus wie Ihr Problem am Anfang ist, wo Sie haben:

if random-float (2 * r * lambda) < 2 * r * lambda 

Da random-Float von einer beliebigen Anzahl x wird immer gehen zu berichten Nummer von 0-x.

Das wird random-float (x) < x immer eine wahre Aussage sein.

+0

Vielen Dank für Ihre Antwort, bezieht sich jedoch mein Problem zu dem Teil, wo die Luke auftritt. Die Zellen, die ausgebrütet sind, müssen sich auf einem eigenen Patch befinden. So würde man irgendwann die Anzahl der Zellen wachsen sehen. Diese Aussage wird absichtlich als eine wahre Aussage gesetzt und betrifft dieses Problem nicht. – Tam

1

Wie ich der Logik des Codes folge, fragen Sie jede Stammzelle, basierend auf "Wahrscheinlichkeit", ob sie teilen will.

Der Schraffurcode sieht gut aus, ich habe das ausgepackt und es wird richtig getestet: entweder finde ich einen Nachbar-Patch oder stirb.

Aber wenn deine Stammzelle beschließt, sich nicht zu teilen, sieht es für mich aus, als käme es zur zweiten [die]. Ist das dein Problem: "Weil mehr Zellen sterben als sterben sollen"?

Auch die "Setze Rasse" wird nicht benötigt, da die Luke in der Frage immer Zuchtstammzelle schaffen wird.


hat dieses Bild von Ihrem letzten Kommentar:

„Ich möchte, dass sie Art und Weise für die schraffierte Zelle, wenn möglich zu bewegen und“ ... außer, dass der Code auf dem Schlüpfling wirkt, so wirklich, die neu geschlüpfte Stammzelle macht das Bewegen, nicht das Original. Wenn das zählt.

Ich habe die gesamte Codezeile getestet, anstatt nur den überladenen Teil herauszuziehen, sehen Sie, ob das hilft. Sie benötigen Schaltflächen zum Einrichten, zur Mitose und ein Ausgabefenster zum Anzeigen der Nachrichten. Kommentare von mir im Code enthalten das ursprüngliche Ergebnis der if-Anweisung des ursprünglichen Beantworters.


breed [stemcells stemcell] 

    globals [ 
     r 
     lambda 
     probability 
     ] 


    to setup 
     clear-all 
     set r 0.5544 
     set lambda 1.233 
     set probability .85 
     create-stemcells 1 
     end 

    to mitosis 
     ask stemcells [ 
     if random-float (2 * r * lambda) < 2 * r * lambda [ ;; this is superfluous, always true 
      ifelse random-float 1. < probability [ 
     hatch 1 [ 
      let free-neighbor one-of neighbors with [not any? turtles-here] 
      ifelse free-neighbor != nobody [ 
      move-to free-neighbor 
      ] 
      [; this die is executed if there is no free space in the neighborhood 
      output-show " Dead because of no free space in neighborhood" 
      die 
      ] 
      ] 
     ;set breed stemcells  ;; not necessary in an ask of stemcells 
     ] 
      [;this die is executed if probablity compares to random-float and the hatch is not done 
     output-show " Dead because did not hatch" 
     die 
     ] 
      ] 
     ] 
     e 
+0

Hallo Lon, danke für deine Antwort! – Tam

+0

Gepresst geben Sie dort zu früh ... sorry darüber Das Problem ist in der ersten sterben, eigentlich. Ich habe das implementiert, um eine einzelne Zelle auf einem Patch zu bekommen (aber eigentlich will ich nicht, dass sie stirbt. Ich möchte, dass sie sich bewegt und nach Möglichkeit der schraffierten Zelle Platz macht). Wenn ich sie nicht sterben lasse, werden sie sich auf Patches aufschichten, was mein Problem ist. Der zweite Würfel ist notwendig für die Wahrscheinlichkeit zu arbeiten, wie Sie erklärt haben, also kein Problem dort. Lassen Sie mich wissen, wenn Sie an etwas denken :) – Tam