Asansör hareket algoritması (tıkandım)

Başlatan mr.selim, 18 Aralık 2016, 13:42:49

mr.selim

Alıntı yapılan: Melih1802 - 19 Aralık 2016, 01:07:35
Artık ekran alıntısı uygun gelmeyecek, bir hali ile programı atacağım Similasyon' da incelersin.
Kendi mantığını da katarak geliştirebilirsin, ekleyemezsen ben eklerim.

Anladım hocam indiriyim o zaman olur. Görmek açısından iyi gelebilir haklısınız.

zamzam23

#16
anladığım kadarıyla programı yazmada çok sorun yok. sorun algoritmasında.
aslında proje sahibi siz olduğunuza göre, toplama biçimine de siz karar verebilirsiniz. literatürde genel olarak kullanılan aşağı toplama ve yukarı toplama biçimleri vardır. siz nasıl arzu ediyorsanız öyle toplama yapabilirsiniz. Çok önemli değil. Toplama biçimleriyle alakalı genetik algoritma kullanılarak çeşitli biçimler ortaya konmuştur dubleks ve daha üzeri asansörler için. ama sizin projede buna da gerek yok. istediğiniz gibi toplama yapabilirsiniz. Megep asansör eğitim modülleri de terimler ve kullanılan sensörler ile ilgili bilgi verecektir.

altı çizili kelimeler konuyla alakalı size farklı bakış açıları kazandırabilir. araştırabilirsiniz.

mr.selim

Alıntı yapılan: zamzam23 - 19 Aralık 2016, 09:17:02
anladığım kadarıyla programı yazmada çok sorun yok. sorun algoritmasında.
aslında proje sahibi siz olduğunuza göre, toplama biçimine de siz karar verebilirsiniz. literatürde genel olarak kullanılan aşağı toplama ve yukarı toplama biçimleri vardır. siz nasıl arzu ediyorsanız öyle toplama yapabilirsiniz. Çok önemli değil. Toplama biçimleriyle alakalı genetik algoritma kullanılarak çeşitli biçimler ortaya konmuştur dubleks ve daha üzeri asansörler için. ama sizin projede buna da gerek yok. istediğiniz gibi toplama yapabilirsiniz. Megep asansör eğitim modülleri de terimler ve kullanılan sensörler ile ilgili bilgi verecektir.

altı çizili kelimeler konuyla alakalı size farklı bakış açıları kazandırabilir. araştırabilirsiniz.
Vakit ayırdığınız için teşekkür ederim hocam.
Yazılmasında şöyle sorun var, konu başında da belirttim senaryoyu yapabiliyorum fakat LADDER a yansıtamıyordum. Hocam çok yeniyim yazdıklarınızı baştan sona sürekli tekrar okuyorum anlamak için. Bu toplama bildiğimiz '+' olan toplama mı? Evet altı çizili kelimelere daha çok yoğunlaştım tam anlayamadığım için tekrardan teşekkürler.

muhendisbey

Asansördeki yaşadığınız problemin genel adı gezgin satıcı problemi.
Yani en kısa yolu kullanarak gitmelisin.

2. kattasın 4. ve 13. kata bastılar. 13. kata önce bastılar diye önce 13'e çıkıp sonra 4'e inmen yolu uzatır. 4. kattaki 7. kata çıkacaksa ve 13 deki 0 a inecekse 13-4-7-0 mı? Yoksa 4-7-13-0'mı?
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

mr.selim

Alıntı yapılan: muhendisbey - 19 Aralık 2016, 13:34:50
Asansördeki yaşadığınız problemin genel adı gezgin satıcı problemi.
Yani en kısa yolu kullanarak gitmelisin.

2. kattasın 4. ve 13. kata bastılar. 13. kata önce bastılar diye önce 13'e çıkıp sonra 4'e inmen yolu uzatır. 4. kattaki 7. kata çıkacaksa ve 13 deki 0 a inecekse 13-4-7-0 mı? Yoksa 4-7-13-0'mı?

4 7 13 0 olmalı bencede. Bunu programa nasıl işlicem ? öyle olmalı diyorum ama yazılımsal olarak en kısa yolu nasıl seçtiricem peki? o kıyas işlemi nasıl olucak? Valla hocam böyle giderse zaten bırakıcam bunu olmuyorsa olmuyor diyip :)

kimlenbu

Korkarak soruyorum, bu ödev değil mi ? bir projede kullanılmayacak ? :)))

mr.selim

Alıntı yapılan: kimlenbu - 19 Aralık 2016, 15:16:12
Korkarak soruyorum, bu ödev değil mi ? bir projede kullanılmayacak ? :)))

Yok daha öğrencilik bitmedi. Öğrenci projesi diyelim. Ödev bir not karşılığı zorunlu yapılan birşey. Not'a ihtiyacım yok çok şükür :)

mert3162

akşama yazıcam burda bi mesajım bulunsun en kolay yöntem asansör hareket halindeyken comperatör kontakları kullarak asansörün önce yönünü tayin etmek diyelim asansör 2.katta eleman bindi aşağıya iniyor birinci kattakide cagırma butonuna bastığında bunları alıp bir word içine yazıp asansörün hangi katta olduğu bilgisinide başka bir worde yazıp karşılaştıracağız sonra eğer iki word birbirine eşitse o katta duracak yolcu bindikten sonra varış noktası en yakın olan hedef neresi ise oraya gidecek daha sonra diğer yönde hareketine devam edecek.Şaka maka ilk mesajıda gördüğümde yine bir ödev projesi diye yardım etmemiştim ben mesaj yazmadan zaten 3 sayfa kadar ilerlemiştiniz ama madem işin icine ciddi algoritmalar girmeye başladı bende bir ucundan tutmak isterim.
|^^^^^^^^^^^^\ ||\
|__PICPROJE.ORG __
||'""|""\___
| _____________ l | |__|__|___| )
(@!)!(@)"""""**|(@) (@)****|(@)---------

 Üstadlarım nonstradam & Logan

muhendisbey

Alıntı yapılan: mr.selim - 19 Aralık 2016, 14:27:47
4 7 13 0 olmalı bencede. Bunu programa nasıl işlicem ? öyle olmalı diyorum ama yazılımsal olarak en kısa yolu nasıl seçtiricem peki? o kıyas işlemi nasıl olucak? Valla hocam böyle giderse zaten bırakıcam bunu olmuyorsa olmuyor diyip :)
Nasıl olacak?
Elinde olması gereken veriler bulunduğun kat, ve basılı olan katlar.
Basılı olan katları ya sıra ile artırarak bakacaksın: 2. kattasın 3'e basıldı mı? Sonra bakacaksın: 1'e basıldı mı? Bir yukarıdan bir aşağıdan. Bu sana basılı olan katın uzaklığını verir ve uyuşma olduğunda o kata hareket edersin. Sonradan basılma olursa diye onu sonrakilere atmalısın. Yoksa 13'üncü kata yada sıfıra hiç gidemezsin.
Bir diğer yol ise basılı olan katların numaralarının  tamamından  bulunduğun katı çıkarırsın. En küçük olana hareket edersin. Sonradan basılan olursa diye 2. bir kayıt tutarsın.

Duruma göre (ödev sonuçta) yön değiştirmeme olayını ekleyebilirsin. Önce yukarıya doğru toplayarak gider, gideceği üstte bir yer yoksa toplayarak aşağı iner şeklinde. Örneğin Aux 1 output set ise yukarı toplayarak git, reset ise aşağı doğru toplayarak git.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

zamzam23

Alıntı yapılan: mr.selim - 19 Aralık 2016, 13:23:08
Vakit ayırdığınız için teşekkür ederim hocam.
Yazılmasında şöyle sorun var, konu başında da belirttim senaryoyu yapabiliyorum fakat LADDER a yansıtamıyordum. Hocam çok yeniyim yazdıklarınızı baştan sona sürekli tekrar okuyorum anlamak için. Bu toplama bildiğimiz '+' olan toplama mı? Evet altı çizili kelimelere daha çok yoğunlaştım tam anlayamadığım için tekrardan teşekkürler.
Toplamadan kasıt insanların katlardan alınması. örnek veriyorum ana kumanda kartından yukarı yönlü toplamayı seçtiniz. asansör şöyle çalışır:
- asansör yukarı seyir halindeylen ara katlardan çağrı gelmişse durur ve insanları alır.
(2. kattan biri bindi ve 10. kata gitmek için kabin içinden kayıt verdi.8. kattan da başka biri asansöre binmek için kayıt verdi. asansör 8. katta durur)

- ama aşağı yönlü giderken ara katlardan çağrı gelirse durmaz önce kabin içerisinden verilen çağrıları tamamlar.
(2. kattan biri bindi ve 10. kata gitmek için kabin içinden kayıt verdi. 8. kattan da başka biri asansöre binmek için kayıt verdi. o durumda asansör 8. katta durmaz. 10. kata gider sonra 8. kata iner.)


Bu tamamen size bağlı bir algoritmadır. siz istediğiniz şekilde koşturabilirsiniz. ama en optimumu (en kısa süre) tercih edilir. bu da genetik algoritmanın belirgin bir örneği olan gezgin satıcı problemidir.

ama sizin projede bu kadar karmaşık düşünmeye gerek yok. Bir algoritma belirleyin ve ona yönelin. Ben olsam basit olması açısından, çift yön toplamalı yaparım.
içerden ve dışardan gelen tüm kayıtları alırım, sıraya koyarım. Gelen her yeni çağrıyı listeye ekler ve tekrar sıralarım. sonrasında yukarı yöndeyken artan sırayla, aşağı yöndeyken azalan sırayla katlarda durarak görevimi tamamlarım.Durduğum katı listeden siler ve tekrar sıralarım.

nasıl yazılacağı konusuna gelince, plc bilgim pek yok. işlemci ile yapacak olsan yardımcı olurdum. plc bilen arkadaşlar yardımcı olacaktır. Kolay gelsin.


mr.selim

Alıntı yapılan: mert3162 - 19 Aralık 2016, 15:47:49
akşama yazıcam burda bi mesajım bulunsun en kolay yöntem asansör hareket halindeyken comperatör kontakları kullarak asansörün önce yönünü tayin etmek diyelim asansör 2.katta eleman bindi aşağıya iniyor birinci kattakide cagırma butonuna bastığında bunları alıp bir word içine yazıp asansörün hangi katta olduğu bilgisinide başka bir worde yazıp karşılaştıracağız sonra eğer iki word birbirine eşitse o katta duracak yolcu bindikten sonra varış noktası en yakın olan hedef neresi ise oraya gidecek daha sonra diğer yönde hareketine devam edecek.Şaka maka ilk mesajıda gördüğümde yine bir ödev projesi diye yardım etmemiştim ben mesaj yazmadan zaten 3 sayfa kadar ilerlemiştiniz ama madem işin icine ciddi algoritmalar girmeye başladı bende bir ucundan tutmak isterim.

Haklısınız aslında konu ödev gibi olunca, bende öğrenci olunca pek yardım edilesi gelmiyor. Sonuçta bu benim görevim ve benim yapmam gerekiyor. Sağolsun @Melih1802  hocam ders niteliğinde paylaşımlar yaptı. Bunun direk ödev olmasından ziyade böyle eğitim şeklinde olmasını çok istedim, ki başkaları da anlayarak yapsınlar diye. Canlarınız sağolsun sizlerden çok şey öğreniyorum :)

Aradğım şeyi siz belirtmiş olabilirsiniz. Çok mantıklı geliyor. C dili gibi olsa, kıyas yapmak basitleşiyor örnekleri çok ama ladder da daha yeniyim ve hiç böyle bişeye denk gelmedim. Dün biraz kurcaladığımda diziler olduğunu farkettiğimde işin içinde çok şey olduğunu farkettim. Umarım bir ilerleme kaydederim. Bu projeyi yapmam gerçekten şart değil. Bu dönem böyle bir fırsat yakaladığım için üzerine çok düşmek istedim. Olmasa da başka zaman da öğrenirim. Teşekkürler ederim hepinize.

mr.selim

Alıntı yapılan: muhendisbey - 19 Aralık 2016, 16:32:29
Nasıl olacak?
Elinde olması gereken veriler bulunduğun kat, ve basılı olan katlar.
Basılı olan katları ya sıra ile artırarak bakacaksın: 2. kattasın 3'e basıldı mı? Sonra bakacaksın: 1'e basıldı mı? Bir yukarıdan bir aşağıdan. Bu sana basılı olan katın uzaklığını verir ve uyuşma olduğunda o kata hareket edersin. Sonradan basılma olursa diye onu sonrakilere atmalısın. Yoksa 13'üncü kata yada sıfıra hiç gidemezsin.
Bir diğer yol ise basılı olan katların numaralarının  tamamından  bulunduğun katı çıkarırsın. En küçük olana hareket edersin. Sonradan basılan olursa diye 2. bir kayıt tutarsın.

Duruma göre (ödev sonuçta) yön değiştirmeme olayını ekleyebilirsin. Önce yukarıya doğru toplayarak gider, gideceği üstte bir yer yoksa toplayarak aşağı iner şeklinde. Örneğin Aux 1 output set ise yukarı toplayarak git, reset ise aşağı doğru toplayarak git.

Değerli yorumlarınız için teşekkür ederim. Sanırım zamzam hocamızın toplamı olayından kastettiği bu. Bu iş beni aşıyor gibi bunu daha basite indirmezsem bir sonuca ulaşamam gibi gözüküyor. sizin bu dediğiniz yöntem ile her kat için mi network girmem gerekir ? kat 2 için aşağı olasılıklar ve yukarı olasılıklar kat 1 için aşağı olasılıklar ve yukarı olasılıklar ? Birde anlamadığım bir nokta ise, Misal kat 2 de iken, 1 e 3 e ve 0 a basıldığında, bu 3 durum için ayrı ayrı networklere mi girmem lazım yoksa tek networkte bu 3 durum incelenebilir mi ?

mr.selim

Alıntı yapılan: zamzam23 - 19 Aralık 2016, 16:56:31
Toplamadan kasıt insanların katlardan alınması. örnek veriyorum ana kumanda kartından yukarı yönlü toplamayı seçtiniz. asansör şöyle çalışır:
- asansör yukarı seyir halindeylen ara katlardan çağrı gelmişse durur ve insanları alır.
(2. kattan biri bindi ve 10. kata gitmek için kabin içinden kayıt verdi.8. kattan da başka biri asansöre binmek için kayıt verdi. asansör 8. katta durur)

- ama aşağı yönlü giderken ara katlardan çağrı gelirse durmaz önce kabin içerisinden verilen çağrıları tamamlar.
(2. kattan biri bindi ve 10. kata gitmek için kabin içinden kayıt verdi. 8. kattan da başka biri asansöre binmek için kayıt verdi. o durumda asansör 8. katta durmaz. 10. kata gider sonra 8. kata iner.)


Bu tamamen size bağlı bir algoritmadır. siz istediğiniz şekilde koşturabilirsiniz. ama en optimumu (en kısa süre) tercih edilir. bu da genetik algoritmanın belirgin bir örneği olan gezgin satıcı problemidir.

ama sizin projede bu kadar karmaşık düşünmeye gerek yok. Bir algoritma belirleyin ve ona yönelin. Ben olsam basit olması açısından, çift yön toplamalı yaparım.
içerden ve dışardan gelen tüm kayıtları alırım, sıraya koyarım. Gelen her yeni çağrıyı listeye ekler ve tekrar sıralarım. sonrasında yukarı yöndeyken artan sırayla, aşağı yöndeyken azalan sırayla katlarda durarak görevimi tamamlarım.Durduğum katı listeden siler ve tekrar sıralarım.

nasıl yazılacağı konusuna gelince, plc bilgim pek yok. işlemci ile yapacak olsan yardımcı olurdum. plc bilen arkadaşlar yardımcı olacaktır. Kolay gelsin.


Değerli yorumunuz için teşekkürler. Durum ödevden ziyade öğrenme olunca üstatlarım baya bilgi aktarır oldu teşekkür ediyorum aradığım algoritma yapısı tam olarak da bunlar diyebilirim. Özellikle hafızaya alıp yukarı yönde artan sıralama ve aşağı yönde azalan sıralama yapma fikri aklıma gelmişti ama plc de ladder yöntemi kullandığım için nasıl yapıcağım konusunda fikrim yoktu. 'Diziler' mantığı sanırım plc de de varmış dizilerle yapabilirim sanki, bu yönde mi araştırmaya devam ediyim ?

muhendisbey

Network PLC'nin kabiliyetine de bağlı. Her PLC bir değil, benim uğraştıklarımda bunların her biri ayrı network olmalı. 1,3 ve 5'in basıldığında bunlar için mühürleme yapmalısın. Şimdilerde delta PLC vs var bunlarla hiç uğraşmadım, ama bu tür yerlerde sayıcı benzeri yapılar eklediklerini duydum. Ben twido ve gemo üzerinde öğrendim öğrenciliğimde. Fi tarihinde kalmış olabilir :)
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

mr.selim

Alıntı yapılan: muhendisbey - 19 Aralık 2016, 17:57:09
Network PLC'nin kabiliyetine de bağlı. Her PLC bir değil, benim uğraştıklarımda bunların her biri ayrı network olmalı. 1,3 ve 5'in basıldığında bunlar için mühürleme yapmalısın. Şimdilerde delta PLC vs var bunlarla hiç uğraşmadım, ama bu tür yerlerde sayıcı benzeri yapılar eklediklerini duydum. Ben twido ve gemo üzerinde öğrendim öğrenciliğimde. Fi tarihinde kalmış olabilir :)

Sayıcı ile kullanmamı çok söylediler evet. Artık ladder a bir şekilde aktarıcaz inş. Siemensin plc lerini TIA portal üzerinden simüle ediyorum. Yaklaşık olarak çok benziyorlar özel komutlar dışında. En kötü ilerde bunlar karşıma çıkarsa hiç duymadım demem buda bir avantaj :)