Bersarang jika pertanyaan dalam konteks patch NetLogo

Saya ingin mengubah warna tambalan menjadi hijau dalam kondisi berikut:

-JIKA ada dua bercak biru pada kolom yang sama dan jaraknya lebih kecil dari 25 DAN

-JIKA ada bercak kuning pada kolom yang sama dan di antara bercak biru yang dipilih tersebut

-Kemudian ubah warna semua tambalan yang memenuhi kondisi ini menjadi hijau.

Saya kesulitan membuatnya di NetLogo, mencoba menggunakan loop bersarang tetapi tidak menemukan cara. Terima kasih atas bantuannya. Dan saya telah menambahkan contoh gambar yang ingin saya capai dan menandai contoh tambalan biru.

masukkan deskripsi gambar di sini

Selain itu, untuk menunjukkan apa yang ingin saya lakukan dalam kode (maaf tentang kode):

     if any? patches with [pcolor = blue and
      (if any? patches with [pcolor = blue and pycor = ?(selected_first_blue's_pycor)
        if any? patches with [pcolor = yellow and pycor < ??(selected_first_blue's_pycor) and pycor > ?(selected_second_blue's_pycor)))
    [ask patches [set pcolor green]]

person Ecrin    schedule 28.05.2020    source sumber
comment
Silakan posting apa yang telah Anda coba dan jelaskan apa yang salah.   -  person underscore_d    schedule 28.05.2020
comment
Menambahkan contoh kode, hanya untuk menunjukkan logika saya. Jika struktur NetLogo tidak sesuai, apakah ada cara lain untuk membuatnya?   -  person Ecrin    schedule 28.05.2020


Jawaban (1)


Cara Anda mendekatinya, Anda memerlukan pernyataan yang cukup berbelit-belit seperti:

let upper-blues patches with [color = blue and
   any? other patches with [color = blue and pxcor = [pxcor] of myself
        and pycor < [pycor] of myself and pycor > [pycor] of myself - 25]

Saya percaya ini akan lebih mudah untuk mengambil perspektif patch yang ingin Anda ubah menjadi hijau. Jika saya telah mengartikan kondisi Anda dengan benar, tambalan itu perlu mengerjakan tambalan kuning terdekat di atas/bawah/at dan kemudian memeriksa apakah ada dua bercak biru yang mengurung kuning dan dirinya sendiri dengan bercak biru cukup dekat satu sama lain. Saya berasumsi Anda telah mematikan pembungkusnya.

Berikut adalah model lengkap yang memasukkan kura-kura merah alih-alih mengubah petak menjadi hijau sehingga Anda dapat melihat apakah model tersebut mengidentifikasi petak yang benar.

to setup
  clear-all
  ask patches [set pcolor white]
  ask n-of 100 patches [set pcolor blue]
  ask n-of 100 patches [set pcolor yellow]
end

to convert-to-green
  let turn-green nobody
  ask patches
  [ let my-column patches with [pxcor = [pxcor] of myself]
    let above-yellow min-one-of my-column with [pcolor = yellow and pycor >= [pycor] of myself][pycor]
    let above-blue ifelse-value (above-yellow != nobody) [min-one-of my-column with [pcolor = blue and pycor > [pycor] of above-yellow][pycor]][nobody]
    let below-yellow max-one-of my-column with [pcolor = yellow and pycor <= [pycor] of myself][pycor]
    let below-blue ifelse-value (below-yellow != nobody) [max-one-of my-column with [pcolor = blue and pycor < [pycor] of below-yellow][pycor]][nobody]
    if above-blue != nobody and below-blue != nobody and ([pycor] of above-blue - [pycor] of below-blue < 25)
    [ set turn-green (patch-set self turn-green)
    ]
  ]
  ask turn-green [sprout 1 [set color red]]
end

Setelah Anda yakin itu berfungsi dengan benar, ubah ask turn-green [sprout 1 [set color red]] menjadi ask turn-green [set pcolor green].

Kode ini memeriksa setiap patch dalam urutan acak dan menambahkannya ke kumpulan patch (disebut turn-green) jika kondisinya terpenuhi. Setelah semua tambalan diuji, kumpulan tambalan yang dipilih kemudian berubah warnanya. Hal ini untuk menghindari masalah bercak kuning atau biru yang berubah menjadi hijau dan tidak tersedia untuk diperiksa oleh tambalan selanjutnya.

person JenB    schedule 28.05.2020
comment
Terima kasih atas balasan cepat dan kodenya. Saya sudah mencobanya, ada tanda kurung yang hilang dan ditambah jika ada? periksa sebelum setiap kode biarkan di patch tanya. Namun, kali ini memerlukan pemeriksaan lain untuk patch yang ditetapkan di dalam pemeriksaan tambahan. Misalnya, tidak ada kesalahan yang diberikan untuk tambalan di bawah kuning pada baris ini: jika ada? tambalan dengan [pcolor = biru dan pycor ‹ [pycor] di bawah kuning]. Juga, apakah Anda menyarankan saya menagih beberapa agen untuk tugas ini dengan memeriksa setiap patch apakah kondisinya memuaskan atau lebih baik mengikuti arah konteks patch. Selain itu, pembungkusan dimatikan. - person Ecrin; 28.05.2020
comment
setel turn-green patch-set self turn-green - Kesalahan: Diharapkan ada perintah. Juga, hal yang sama terjadi pada kondisi yang saya nyatakan di komentar sebelumnya. Terima kasih. - person Ecrin; 28.05.2020
comment
Saya telah mencoba versi yang diedit. Maksud saya itu memberikan kesalahan ketika misalnya di atas-kuning kosong: APA SAJA? masukan yang diharapkan adalah kumpulan agen tetapi malah mendapat NOBODY. Saya harap saya bisa menjelaskan apa yang saya maksud. - person Ecrin; 28.05.2020
comment
Saya dapat menyelesaikannya dengan mempertimbangkan setiap kolom satu per satu dan menggunakan ide atas dan bawah Anda. Terima kasih atas bantuan dan waktunya. Tapi saya tidak bisa menemukan masalah dengan kode Anda yang sepertinya bisa menyelesaikan masalah dengan beberapa kode baris atau mungkin saya tidak bisa menjalankannya. Pokoknya terima kasih atas bantuan dan arahannya. - person Ecrin; 28.05.2020
comment
oke, saya telah melakukannya sedemikian rupa sehingga saya dapat menguji kodenya. Tampaknya berfungsi dengan baik (walaupun saya harus memperbaiki beberapa tanda kurung) - person JenB; 28.05.2020