Hello, everyone. And first off, I want to thank you for coming out this early on Sunday morning, especially since many of you have been engaged in quite a bit of drinking here today and many days here prior at DEF CON. So thank you for coming out, making it out this early. A little louder. Is that better? Okay. All right, so today's talk is port scanning without sending packets. My name is Gregory Pickett with Hellfire Security. This is a short overview of the talk today. We'll start with how this all got started or how I ran across this, followed by it's really not a magic trick. It is actually pretty straightforward. Next is loose slips, sink ships, because ultimately it is what is advertised on the network that allows us to do what we're going to do today. And that next is catch me if you can. And finally we're going to go back to the future or how to ultimately mitigate this risk in an enterprise. Okay. So we'll start with suppose you have this guy on your network. You really don't know what you're going to get, right? And this guy is involved in some suspicious, possibly malicious activity on your network. How do you identify him? As an intrusion analyst, I have a three-step process in approaching events, characterizing the activity, profiling the hosts involved and using that to make a determination as well as to select next steps. When profiling, it is important for me to be able to identify my source and that often begins with a host name. Names are one way to quickly categorize a host as an asset or an intruder and can often lead to an easy identification of the source. For the most part, Windows hosts are rather easy. I just run NBT stat against the host and utilize, you know, the NB, or the name service to get a host name. But what about Linux? And what about Apple computers? And there are a whole lot more out there, different types of hosts like printers and a whole variety of different networking appliances. So this is the problem that I had as an analyst and the question that I was looking to answer. Okay. Now, when I began to look for my answer, as an intrusion analyst, I'm looking at the network quite a bit and I was examining the traffic that was flowing to my interface and I saw quite a bit of multicast that I was not familiar with. Now, the interesting thing about this multicast was that there was a tremendous amount of name information and I was very excited, of course, because this was something that looked like it might be an answer to the problem that I was having. So I went ahead and did a little research on this multicast and this is what I found. It was multicast DNS. And the purpose of multicast DNS is peer-to-peer name resolution. It does have a history. Multicast DNS is the successor to Apple Talk name binding protocol and it was eventually added to Apple's zero configuration networking initiative. Now, in addition to multicast DNS being part of this initiative, there was also an addition by Apple of DNS SD via multicast or DNS service discovery via multicast to the initiative to allow for peer-to-peer service discovery in addition to the name resolution. So you can begin to see how this is going to look. The features, well, it is DNS just running over multicast. Each host participating in multicast DNS maintains its own local domain and queries and responses are sent to the multicast address over UDP port 5353 so that all participating hosts can answer queries sent and all participating hosts can update their DNS cache with the responses that are returned. Everyone is aware of the resolution that other ones are making. They are able to update their cache so that they don't have to duplicate that sort of activity. So you see a lot of flow of information, a lot of questions being asked and answered over the multicast. Now, there are a few basic operations that these hosts engage in and this is important when we take a look a little bit about how this information flows over the network later on. First off, there's the probe. The probe basically is a situation in which there is a record that this host is going to contain and it wants to establish this as a unique record. So it goes ahead and probes the network very much like a Eucratiotus ARP to make sure that this host, this record is actually going to be unique. Followed up by an announcement to let everyone on the local community, those participating in the multicast DNS community that these are the records that I'm going to be holding and these are going to be the unique records as well as any shared records. Shared records are very special. They are something we're going to be looking at a little bit more later on and what we do rely on. So once it's done this announcement, it then engages in the querying and responding to queries. There's some information there. You take a look at that later. These are basically specific properties about that activity to identify these sorts of operations. And finally, there is a goodbye. In the multicast DNS, there are unique as well as shared records. With unique records, not unlike traditional DNS, there is a time to live so that if it's a unique record and the time to live expires, everyone realizes this is no longer valid and they dump the record. However, if you have a community where multiple hosts are sharing or all have this record contained on their host, would it expire if one member decides to no longer participate? Well, it would not because you have a lot of other hosts that are maintaining that record, that shared record. So you want to make sure you say goodbye so that the hosts out there know that you will no longer be responding for this record, no longer be responding to queries for this record. So it's been a way to drop out when you are sharing records with others. All right. I want to take a look quickly at some implementations of multicast DNS and this is important. Let me look at some things later on. First off, it was all started by Apple, of course. People who are with RFC are from Apple, but it was picked up by Avahi and you find this service available as developed by Avahi in a great number of Linux distributions now. And then more surprising than that is actually there are a tremendous amount of implementations on networking appliances. I believe even TiVo is running this. So TiVo, you have network attached storage cameras, any number of multimedia devices, printers, everything seems to be loaded with this now. Okay. Now, these are just a little example of, I'm not going to talk about this really, but just looking at the records that are utilized, are being on these hosts, these are names for the hosts, and also, you know, services, service records, service records to be utilized in the DNS service discovery. Okay. Also, in addition, there is text record, unlike traditional DNS, a service record in multicast DNS is paired with a text record to give some information about how that service is configured for any host that wishes to utilize that service. They can look at that record and know exactly what they'll be dealing with. And then there is the HINFO record, also utilized in multicast DNS. Okay. Now, before I move on, it is important to provide some additional information regarding DNS service discovery, as it is very important to what I'm about to show you. Hosts participating in multicast DNS are often participating in DNS service discovery as well. And this is a little bit about what these hosts are doing and what we'll take advantage of later on. First off, DNS service discovery is not unique to multicast DNS. It works over standard and multicast DNS. However, when it operates over multicast DNS, it is fully compliant. It is involved in continuous querying because if a user wants to utilize or a piece of software wants to utilize one of the services available out there, it wants to make sure that the list that it has to select from is fresh and is valid. So it's always going to constantly be querying and collecting responses in order to make sure that that list is valid. Now, it's important to keep in mind when you're dealing with multicast DNS of shared records. Because shared records in DNS service discovery are basically you have a situation in which, let's say you have a community of hosts participating in multicast DNS and also DNS service discovery. And of those, let's say you have five that offer FTP services. Those five will actually share the pointer record for the FTP service. So when this pointer record, when someone actually queries the community for that point record, these hosts, these five hosts will return a response to that query with a pointer pointing back, though, not, you know, the shared record pointing back, though, in each instance to their own deployment of it. So each host will point back to their particular instance so that the software or the user making the selection can then, you know, have the records available or can go get the records available to utilize any particular service that they decide that they want to use out of the ones that return a response. Okay. So these pointer records will share among those five point back to unique service and text records that each host will then have to make available so that you figure out about that service and utilize it. Okay. All right. So when I saw this, I was pretty excited. You know, I had an additional way to profile my host quickly, like I was able to do with Windows hosts. And so I created a tool called MDNUS host name, the parameter there. It does a reverse lookup of the IPv4 address. I did repurpose some code that was designed for traditional or conventional DNS. So it basically just does packages the same message but sends it to UDP port 5353. So operate using a basically unicast legacy query to UDP port 5353 of the target. In addition, while I was looking through these records that I was seeing over, you know, being advertised or multicast, I saw a lot of other information types of records. And I began to identify some unique things about these hosts that were responding and, you know, delivering these records over the local network. So I said, well, let's go ahead and make a tool to take a look at those records so I can maybe, once I get the host name, I can go ahead and find out a little bit more about those, continue the profiling. So I made a MDNUS lookup. There's the parameters there. Now it's important to realize that it submits the question as given.  So if you don't get an answer, especially in situations when you were expecting an answer, go ahead and re-evaluate that to make sure that your question is correct. And it also operates using unicast legacy query to UDP port 5353 of the target. I'm going to go ahead and do a demonstration of that real quick. I have a host here. Oops. That was weird. All right. So I'm going to start off by asking this host. Let's say this is one of the suspicious hosts that I'm investigating. I'm going to ask it its name. And there it goes. Return the name pretty quickly. And apparently its name is Ubuntu. I'm guessing you know what operating system that is. There's a lot of information in the name. So let's go ahead and take a look at the host. Let's say that you, okay, you may suspect it's a Linux box, but maybe you don't. Maybe it's some kind of generic name like Bob's computer. All right. So you want to maybe explore all the records that this will respond to to get a better idea of what you're dealing with. The same target. I'm going to go ahead and ask it if it's running the workstation service using the pointer record or that service. And I'm going to make sure that it knows that I want the pointer. Okay. There we go. You return the pointer record. It also returns several other records. Multicast DNS is very well conserved bandwidth. And when it's packaged a couple of additional records in there that it may, that it thinks that I may want later. So why is it given to me now in the same packet? It's giving me most likely the service and the text records to go along with it so that once I point to that unique instance, you know, I might ask for those records. It's going to get ahead and giving them to me now. The blank one is most likely NSEC. And that's because I didn't write any code to parse NSEC. So if it's blank, it's probably NSEC. And then finally it went ahead and gave me the A record as well. So I can follow up and then, you know, directly address the service on that port. Okay. So quickly, you know, we went over this and I was, of course, when I did all of this, I was very excited because Windows Boxes, of course, is a lot out there, but there's a lot that are not Windows. And so this allowed me to address a gap that I had. Okay. But I had a question for myself here. I said, isn't this just flowing my interface on its own? I never joined any groups. I never sent any packets on anybody saying, you know, add me to this group, the local router, add me to this group.  All right. But what could I do? I also have a background as a penetration tester. So for me, this was great information gathering. All right. If there is a host advertised in any sort of information, speaking at all on this multi-cance address, I immediately knew that, of course, it was live. Okay. And if there were any hosts out there that were responding to queries for services, I could pretty much write down, okay, that host says he has FTP. I'm going to take him at his word. Got FTP. This guy says he's got FTP. Great. So I can take all this information and I can pretty much record it. And in essence, do a port scan. And that's what we'll be doing in just a minute. All right. But there are some requirements. You must have active responders. Someone has to be offering out there. Someone's going to have services available. You also must be connected to the same switch as other resolvers. Someone's got the author asking. But if you must, you can join the group. And of course, it works best on a busy network because you need hosts out there asking a lot of questions so that you can collect the most answers. Okay. So first cool thing. Host discovery. I'm all excited. I want to use this on the network. I want to see what's out there. What's advertising. So the other parameters. And like any good discovery tool, you are able to give this utility a range that you're interested in. It reports on any host communicating to the multicast address for multicast DNS. It does not join the group, but it does have the option. So let's do a quick demonstration of that. I believe my traffic is still playing. I started some traffic at the beginning. Originally I had some traffic that I recorded from a very large enterprise network to the fortune groups there. I want to say which group. But so I recorded that. But then I went ahead and listened on the hotels wired network with my tools and lit them up.  And I'm going to replay that. I actually have been replaying that. So let's go ahead and run this first tool, MDNS discovery. There you go. Now this is being played back. So the rate of discovery is artificial. You do not have control when you're actually using it live on who's asking questions, when they ask questions and who responds. So it can be very erratic, very irregular flow. But you can see there are a lot of hosts out there, weren't there? At this hotel.  Is the sound still good? Okay. The end result, of course, is completely silent passive host discovery. And the network guy is very unhappy. Very unhappy. Okay. But wait. There is more. Second cool thing. Port scanning. Okay. The gym host performing, in essence, port scans, or actually you're asking one question for one service, it's more like a service discovery, with one packet. Couldn't I perform a port scan with no packets? Just listening. And that's right. So multicast DNS, also running DNS service discovery is two products. Two products in one. Is it magic? Nope. It's Apple's zero configuration networking. Thank you, Apple. So let's do this. DNS service discovery occurs continuously over the network. You want to make sure for the user or for the software itself wants to make sure that that list is fresh. So it's continually discovering this information out there, making sure that this is fresh for the software for the user. So listen for it. Over multicast DNS, you know, the DNS service discovery traffic, don't rely on known service records. It's a very long list. It's too limiting. When a host responds to a discovery request, report all of the SRV or service record ports in its replies as ports open on that host. Okay. So I'm still excited. And coding late into the night can create a DNS scan like any good port scanning tool. It allows you to select a range that you're interested in, as well as any particular service ports that you're interested in. Currently over 22 services, I shouldn't say currently 22 services over 18 ports have been identified using this method. Many more possible, as I said, based on that exhaustive list that they have for DNS service discovery. There's one of the links that I have that on refers you to that list of all the different services out there that are supposedly available somewhere. And findable, using DNS service discovery. Now this tool does not join the group either. Let's do a quick demonstration. And our good friend is the hotel here. I'm going to go ahead and leave it open. There we go. This is, once again, an artificial flow rate. But you can see that there's quite a bit out there. Okay. Now I'm going to go ahead and show you one more. I'm going to stop this real quick. And show you a demonstration that I recorded. Because traditionally when you talk about penetration testing, you're talking about hacking in general, this is not the progression. I should say there is a certain progression you take in that process. And so I decided to go ahead and take these tools and utilize them in that process. So I utilize them basically in a typical penetration testing scenario. So I decided to go ahead and leave it open there, run mdns discovery to see what hosts are out there. Basically just to get an idea of what I have to work with. Who is advertising out there? Once again, come get me. And you can take a look at that list. And there's not a lot of information, but I think that ultimately what you want to do is find out who is the most active. Because it's very likely that they have the most services out there. Okay. So you go through that list and when you come across one that interests you, either you're just randomly picking it out or because it's just got a lot of communication flowing over the multicast address, which hopefully translates or means there's a lot of services available. You can go ahead and stop that and stop that right here. And now that's a real flow there. So you saw live how quickly these hosts are communicating and advertising and how much they're advertising to you. So I'm going to go into a scan and I'm going to target that host, but leave open the ports. Because I kind of want to know all what's available. And this takes a little bit of time though. Because I'm once again relying on someone to be asking the question out there so I can hear the answer. There we go. Nope. Not yet. I'm actually going to be stopping this halfway through because I'm able to actually compromise a host. Realizing these tools. Very ninja. You know, go in there very quickly. And since there was no active flows from me, I was able to get in there pretty quickly and take the host. And actually, at a certain point, there is a lot of information revealed. That pretty much opens up the rest of the network for me. And I want to stop the demo before you guys see that. All right, so we've got FTP, HTTP. Ooh, one of my favorites, Telnet. We'll let it keep going there. Because maybe we can get a better idea of what type of host it is by the ports that are open. Waiting. There we go. 631, I believe is IPP. Could be wrong. I always get those mixed up. So it's possibly a printer then. 515, LPR, I believe. I'm looking a lot more like a printer. Did anyone here see the presentation on using the multi-function printers to own the network? Yeah. This is beginning to look a lot like that. 9100, PDL data stream. Pretty sure this is a printer. So I'm going to go and try some of those services to see if I'm able to get in. And I'm pretty cheeky.  Let's draw it out there and see if I'm able to get in. Ooh, what do you know? I'm able to get in with no password. Someone has not set the password on this. Printer. Wasn't telling that open? It was. Wow. And what it tells me. It kind of already knew it was not set the password. But there it is. And it gives you a couple of things to start with there. The commands and then of course, what do you know? Dump the config. You probably didn't see that. It was rather fast. I'm going to go and stop that right now. And that is because after I saw all the commands, just to get an idea of what I could do with the box. I like to play with these things. Then I would end up the config. And what I ended up seeing was the SNMP community strings. Read and write. So one host as it does in many compromises gave me hundreds based on the advertising that I was seeing and some other observation that I was doing earlier. And this is why many compromises, many compromises, no matter how minor it can ultimately be devastating. How one host let unsecured because no one really cared much about it and thought it was insignificant can lead to a host that is significant. Okay? Very important. All right. Let's go ahead and continue here. Demonstration. And I wanted quickly to take a look at comparing the inactive scan versus this type of passive scan. This is what our sensors see in a typical active scan. It's our end map user there. It lights the IPS up like a Christmas tree. This is not even all of the signatures that fired. And what do our network sensors see? There's me there. During this passive scan. They see absolutely nothing. Okay? So what does this mean? Completely silent passive board scans. They're a security guy. They are still very unhappy. Okay? Now the reason why of course that this is not picked up is because any traffic flowing from your host would be very customary and wouldn't set you apart from others on the network. Assuming you're not doing anything else.  Which is of course ultimately just a DNS query and you know, some HTTP traffic. So it wouldn't appear suspicious or malicious in any way. And you know, if you're not exhibiting any sort of attack behavior, then of course it would not trigger any alarms. All right? And this does not do that. Now this does not get everything out there. All right? But we'll get you some of the most vulnerable hosts. Because if they did not take the time to turn off or very least sanitize multicast DNS and the service discovery happening over it using DNS SD, then probably they didn't take the time to harden them. And we actually saw an example right there. And I'll have you know that I was able to repeat the example over and over and over again. You know, without of course those SNMP community strings. All right? Okay. So as I said to myself, there was a lot more goodies, weren't there? All right. So what else could I do? Well, first off we know from before that there are unique implementations. All right? If you look a little bit more at what's being advertised, you realize there are unique records. Meaning that different device categories contain different records that are unique to that particular device type. Printers would have those printer records. All right? Dealing or dealing with, you know, printer services 515, 631 and 9100. But if you look even further, you realize there are unique sets. So that not only are you going to find a unique type of record on a device type, you are going to find actually a particular set that you will find only on a particular device type made by a particular manufacturer. So could this be used to fingerprint the host? Yes. Yes, it could. If you have services, DNS, SD, UDP local and you have workstation TCP local and in particular the service record, then you're pretty much done with a Linux box. If you have the services, DNS, SD, UDP local, AFP over TCP, TCP local and that's the service and text record, you know, on that host. And as well as device info, TCP local, text record. And guess what? You probably have an Apple host. Printers. Printers will have IPP, printer and one of the three. And I find in particular that HP, those HP direct cards, have all three. Now if you have Black Armor 4D info, the UDP local, Black Armor 4D config, TCP local, service and text records, you're not only dealing with a network attached storage or NAS, but you're also dealing with one specifically from Seagate. IP cameras. If you have a host with the excess video, TCP local service record on it, you're pretty much done with an IP camera and you're dealing with an excess IP camera. They're very specific in that name. All right. But there's actually a little bit more because we talked a little bit about DNS service discovery earlier. And in DNS service discovery, there is that service record, which is, you know, not unique to multicast DNS and DNS service discovery over or via multicast DNS. There's also the text record, which always accompanies it. And that's very particular to multicast DNS service discovery. So not only do unique record sets allow you to fingerprint participating hosts, but information in these record sets, specifically the text records, deliver configuration information to you. And here are some examples. We have a Linux box there in the text record for the workstation service. You have some information there, not a lot, but it does confirm that we're dealing with an avahi implementation of multicast DNS on the Apple computer there in the device info text record. There is, if you look right down in the, what says model right there, it tells me exactly what model of Apple this is. This is a MacBook Pro 6.2. In the text record for those printer, sorry the text record for any of those printer services, it gives you the engine, it gives you the make model and version of the printer, it gives you the admin URL. They were nice enough to also give me the building it was in and the user was next to. Can anyone say social engineering? All right, so that's the printer. And then for the Black Armor 40 info records, the text record that goes with that particular service record you get not only the device model and the vendor, what we already knew was C8 from their unique record set offered, but it confirms it here. You also get the web UI protocol and the web UI port. Thank you very much. So, some day I wanted to create an mdns fingerprint, build a database of identifying record sets, collect all information records and organize by host. Match against the database and then extract the configuration information so that can return the identity and configuration information for each host to the user of that tool. Okay. But there are some limitations. Multicast, routers between the recipient and the source must be multicast enabled. Not such a big limitation after all because this is most effective on your local network. You're not really looking to go too far. You're looking to basically burn and pillage your neighbors there. You're not real worried about the router getting in the way. Mdns has some limitations as well. If you're talking about just querying, if you're just trying to get that name, you're just trying to ask what records it has or see if it has a particular record, you are only going to get link local responses and that's actually something that's designed into the protocol itself. And if you're talking about listening, which is where the real fun is at, you are limited by the layer two boundaries, the broadcast domain as well as the layer two broadcast domain as well as any view then containment that they've implemented. Our next step of course is to take a look at controls that are out there already and what they see. Can they handle this? Can they cope with this? First off, we already know that intrusion detection prevention systems don't do anything in this particular case. They don't see anything. Either ape is not going to really, well it won't do anything for you because there are no sinks. There is no single host where all the traffic is flowing through to show up on that graph that either shows for you or gives you. And of course there are no unusual flows to be picked up by NetFlow or StealthWatch. There's no surge in traffic to your host. There's no unusual amount of traffic to your host. There is no traditional type of worm activity where one host scans a whole bunch of them and then one of those hosts there are no unusual flows. Your flows look like everyone else's flow out there, so it's not going to help you any. So ultimately, do they detect anything? No. They do not. I've tried this of course. I wanted to make sure I did it before I came here because if I was wrong, I'm sure one of you out there would tell me right away. So let's take a look next at some defenses. Okay, so maybe we can't see it. Can we really stop it? Can it be stopped or will it be stopped? Well, we'll talk about the hosts first. Antivirus, antispirer, antispam. Well, the threat is really not on the host. So there's nothing there for it to see. The firewall and port blocking. There is some option there. You can port block on the host 5353. But the thing is there are a lot of hosts out there that are unmanaged. All right, I know. You wish they all were, but they're not. People bring machines in. Either they're machines that the company's purchased, but no one's decided to inventory. No one's decided to add to the system. They just cook them up there. We're only going to use it for a little while, right? And it's there for three years.  So, you know, you have that gap there. So while it can limit your exposure a little bit, it's just not a good choice. And then you really ultimately don't know what you're going to break when you start implementing this sort of things. And of course the intrusion prevention system doesn't help you any. And application control, device control and others aren't really just relevant in this case. All right. So do these help any? No, they do not help. All right.  Well, we're talking about listening on your your local network and firewalls separate zones of trust. I'm operating within a zone of trust. So they would not be involved, really, you know. Network access control, well, traditionally the first gen network access control is going to make sure that I'm patched and that I have an antivirus before I do all this to you, to them, which is nice of it. It's very interested in my well-being. But it's not going to help you any here. Access control list, there's a possibility there. There is a good possibility there. But I think that access control is probably not the best solution for this. But if you have nothing else, you can do that. But you do have to keep in mind what do you break out there. And of course VLANs. VLANs are great. You can see the problem a little bit by walling off your servers from your end-user community. But a lot of what is advertising out there is devices in the end-user community. So you really don't really solve the problem. You do limit it somewhat. The damage somewhat. But you really don't fully address it. So how about these? Not really. Not really. Some coverage there, but really not enough. What can we do then? Well, first off, we want to work with IGNP. Implement IGNP snooping. Make me join the group.  And if you can, authenticate group membership using IGNP if it is available.  And also if you can track members. This is actually a lot harder to do. I looked for some management applications out there that maybe would be able to help report on the memberships in these groups. But there wasn't really anything I saw that was very easy. You had to basically go out to the routers and get a manual list there, maybe run a script something like that to retrieve it. But track the members so that you do know who's participating and you're aware of what you have out there. And now as far as multicast DNS is concerned, the first one was basically to deal with people listening out there on the network. But how do you deal with people who are advertising? I think it's important to take the tools that I've developed, because I know that's what I've been doing, to locate the NBNS responders out there. If you can, and if you can't, harden the box in particular the services that are offered to make sure if you can also sanitize those records. Now we know, of course, that the enterprise is full we do the best we can full of very soft, tender, easy targets. And it's very difficult to get people to stay on top of hardening the host make sure they're hardened properly. But at least if you are able to locate the ones that are advertising, you can prioritize your efforts, okay? Because they do present a much higher degree of risk because they're not just vulnerable but they're telling everyone around them hey, here come get me, again, once again. All right. So ultimately the plan of attack is hunt down NBNS responders with these tools. Remove them or harden them and then implement any controls you have for multicast in your environment. The IGNP snooping as for IPv4, MLDv2 and those environments that have implemented IPv6 implement, of course, IGAP if you have it or any IPv6 multicast authentication mechanisms available and, of course, monitor. Find out who is out there participating. Okay. Before I go today, I'm going to mention a couple other protocols. The simple service discovery protocol for SSTP and link local multicast name resolution. These are Microsoft's answer. Doesn't always have an alternate answer. For zero configuration networking or the zero configuration networking that Apple came out with. Both less developed but still in use. I still see advertisements out there from SSTP. Host utilizing SSTP. Okay. But my final thoughts are hosts are now actively advertising their available tech services to anyone listening on the network. It's great for passive information gathering, but it can be controlled to limit your exposure. But ultimately, this sort of activity is not for the enterprise. The authors of the protocol say this in the RFC, they say this is for the home. This is for the small business. This is not for the enterprise. Unfortunately, as it is mostly in the vendor space, they're all competing. They're all trying to pile on and add on the most features they can. So they are doing this. They are putting these protocols and turning them on by default. They're putting these on their products. And I don't think people are aware of this. So they're putting them these devices in the network and they're advertising. So this is ultimately not for the enterprise. So you need to track this down Okay. This actually is the conclusion of my talk. Thank you for coming today. There are a couple of slides. There are a couple of slides here. The MD5 hashes of the tools as well as the site to get the updates. I don't think that the updated tools are on the DVD. Because I updated the tools and looked for a download and there was none. So make sure you go out to that site. I'll put them up probably tomorrow. Go out to that site. Give them the most up-to-date version. Some links. If you're interested in reading more about it. So once again, this is the end of my talk. Thank you for coming.


Hey everybody, welcome back to the Manga Geekdom. Today, we're doing the March Manga Hall 2023. Waited a bit, got some packages delayed, but here we go. The first one on the list here is Ayashiman, Volume 1 from Yuji Kaku, the same mangaka from Hell's Paradise. This one I really enjoyed. It's a shame that I got cancelled, but at least we're getting it physically. That's awesome. This is a story about a young kid who is unusually strong and he's a huge manga otaku nerd and one day everything changes for him when he meets the character of Udara. She is a kind of an oni Ayashiman or a yokai and she is being chased by a Yakuza gang. So the two meet and they're off into this wild and wacky world, the underbelly if you will of society with a gang and spirits and yokai and all that fun stuff. I'm trying to be as vague as possible, but the series is a lot of fun and I do recommend it even with the short chapter run. Next up is Wave Listen to Me, Volume 9 from Hidawaki Samura. The main character in this series works in the radio business like myself, but the comedy and situations that happen are on point and the art on this is just spectacular. A lot of people will reference things like Blade of the Immortal as some of his best work. I kind of prefer, artistically speaking, this for its subtlety and quiet moments. So, yeah, bit of a hot take maybe, I don't know, but both are great stories. I just kind of prefer this over the other. Next up is the Pokemon Adventure series. Here we have Heart Gold and Soul Silver, all two volumes of this mini series. And I've been patiently waiting. I have the first ten collector's editions, sort of. I have half in boxed form of the original and the other half in the actual three in ones. So I've been patiently waiting, hoping that they would announce more.  I mean, everything could change. We could get an announcement this year or next year or whatever it may be. But yeah, essentially, I got tired of waiting. So I'm going to start picking up the rest of the series. And I am looking to get the Gen 4 box set soon and we'll continue my read through from there. So this is a fun story. Here we have Yokohama Kaidashi Kiko Volume One, the Deluxe editions published by Seven Seas. This came out back in August, 2022. And I preordered this book from Wright Stuff at least two weeks before the release date. Plenty of time to secure a copy. Unfortunately, when it came out, everything else shipped and I never got this book. It went out of stock pretty quick, if I remember correctly. And I've had to wait for so long. And finally, March, 2023, it shipped out and I got my copy. I've never read this series, but I am super happy to have this. It's something that I've been intrigued by for a while. And the fact that we're getting these big deluxe editions for a pretty chill slice of life series like this is great. I talked about Hidoaki Samura with Wave Listen to Me earlier. Here is his other series, Blade of the Immortal, Deluxe Edition, Volume 8. Now I have to admit, I've only read one of these deluxe editions. I'm waiting to get the whole thing and do a full read through of this legendary series. So I can't really gush too much about it, except just marvel at the amazing art as is expected with Samura. Another Dark Horse book here is Berserk Deluxe Edition, Volume 13 by the late Kentaro Miura. When I was first planning out this haul video, I had no idea that, yeah, this was supposed to be the last one for a while. And then we got the surprise announcement that Dark Horse is going to do Volume 14 in November of this year and will include Volumes 40 and 41 along with the guidebook, which will end the tenure, if you will, of Miura's work on Berserk. Eventually down the road, we might get that Volume 15 with Studio Gaga and the production crew and all that stuff, working on the new material with 42, 43, 44, etc, etc. So for now, this year will be the last one where we get deluxe editions for Berserk. Excited to own this. I think it's about time I do another read through of Berserk and maybe do proper videos on it. I made one at the start of my manga tubing career and I never continue with that. So I don't know, maybe I'd like to do an updated take on my thoughts for Berserk and what the book means to me, but that's not all things Berserk. Here is Volume 41. Now, this is pretty interesting. As you can see here, me flipping this book open, the poster is shut. I can't open it and I'm afraid of ripping and tearing the poster off. So I don't want to do that. I'll just leave it alone. But this is super bittersweet. This is the last material that Miura worked on. There's a natural stopping point here where it's such an emotional send off, especially when you know that the author passed away. That makes it much more impactful. And the way this book ends is a thing of beauty, in my opinion. Next up is Level One Demon Lord and One Room Hero. And I am impressed. I don't know what it is about Tofu's art. It has a certain charm to it that I really like. So if you don't know what the series is about, we follow a demon lord that has been defeated by a brave warrior and now he is destined to rise again. I think it's like a decade later, the Demon Lord returns and things are very different. Our hero is a slob shut in and the world has progressed steadily compared to when he was alive. So it's a comedy series with action elements. I'm going to check this out and read on and let you guys know in a later video what I thought of it. The tunnel to summer the exit of Goodbyes Ultramarine Volume Three. Finally got my hands on this. I love the premise for this series. Essentially, a slice of life meets supernatural sci-fi storytelling with possible time traveling. The characters are well done and I love the art style on this. It is super unique compared to everything else out there. Call of the Night Volume 11. Now I'm not up to date, so I can't flip through this for too much. I don't want to spoil myself, but I love this series. Nazuna is one of my favorite characters right now. And I just love the art and story in this. I'm not a vampire guy, but for some reason, Call of the Night hooked me. Dinosaur Sanctuary Volume Two. This was one of my favorite reads of last year. One of my favorite books that I got. Manga sensibilities with proper looking dinosaurs and good science. This is a lot of fun. Insomniacs after school from Makoto Ojiro. And it tells the story of these two kids that have trouble sleeping and other anxiety issues and drama in their lives. And they just happened to meet at the school's defunct astronomy club that has had very odd, bizarre and creepy rumors about it. And now they just find this chill spot to hang out, be at peace and stay quiet and catch some shut eye. Unfortunately, just these two characters using it for that reason isn't enough and the school doesn't take a liking to that. So now they're going to set up the official astronomy club back at this school. Beast Complex Volume Two. I love Beastars, one of my favorite series from recent memory. And it's awesome to get more stories because the world that was created was so interesting that it's only natural to have this anthology series to examine more characters and more snapshot moments in other creatures' lives here. That time I got reincarnated as a Slime Volume 21. Holy crap, 21 volumes of slime. I really need to get back on track with this. I love the art. It is one of my favorite things about it. Also, the characters and the world building and all that stuff. But this one is sort of what ticked off the renaissance for modern isekai, in my opinion. And I do think it's a worthwhile read. Box of Light Volume Two. So happy to have this. I loved the first one. I didn't know I was going to have more volumes. This story is a pretty chill slice of life, but also kind of supernatural-esque. It deals with the people working at an unusual convenience store that is at the border between life and death. Highly recommend checking out Box of Light Volume Two or Volume One. It's OK, get both. Finally, to close off this manga haul, we got Tooms by Junji Ito, another hardcover story collection. And I think aside from the other two books that are solicited, we are nearing an end to published material when it comes to Junji Ito. So I don't know what this is going to do once we have everything collected and they can't pump out more Ito books. But regardless, this is awesome. Super excited to have another one. And if I may, this green spine and all this motif and all that stuff with Tooms, I think it's a missed opportunity. And this book should have been a glow in the dark edition. For the anime side of things, here are the two seasons sets for Dagashi Kashi from one of my favorite mangaka right now, Kotoyama, the same creator of Call of the Night. The manga is unlicensed at the moment. I don't know when we'll see that, but I hope it does happen. I think with the success and popularity of Call of the Night, it does have a chance to get picked up. And to wrap up this video, we got Mononoke finally releasing State Side and we got a Region 1 release thanks to the folks at Disco Tech. This series, if you don't know, is a spinoff from Ayakashi, Japanese classic horror. There was an arc in that series called the Bakoneko Story arc, and it introduces the character of a medicine seller as he deals with various spirits or Mononoke in feudal Japan. This is another wonderful, artistically heavy series. Highly recommend checking it out. It's a thing of beauty. Super cool to finally have this in physical media. So there you go, guys. This was the haul for March 2023. A lot of fun. If you guys want me to review a specific thing that I got here, let me know in the comment section down below. Or if not, let me know what you got in the month of March. Pretty excited to find out as well. Thank you, everybody, for liking, commenting, subscribing, and being a part of the family here at the manga Geekdom. I truly do appreciate it. Thank you all so much for supporting this channel. I've got to go. Thank you, everybody. God bless. Stay safe out there. I will catch all of you on our next video.


Nine things really resourceful people do. People who are recognised as being resourceful are those that stand out among their peers. Resourcefulness is a mindset which is important in the pursuit of success. It's especially needed when the goals you have set are difficult to achieve or you can't see a clear path to help you get to where you desire. You see resourceful people are constantly looking for creative ways that they can leverage their current situation for maximum benefit, beyond quick fixes and immediate financial gain. A resourceful mindset helps you find a way and encourages out of the box thinking to be able to achieve your goals. Eventually you'll be able to visualise and figure out all the possible ways to achieve your goals or wishes. But hold on a minute, I'm pretty sure I've asked you before this time what your definition of a resource is. You probably might have mentioned external values like money or high-profiled networks and some of the other things that society has made us believe. However, a resource is more of internalised values. Remember what we said earlier?  So being resourceful again isn't about what you have or how much you have, it's how you leverage what you have that makes the difference. In simple terms resourceful people are number one not dependent on the resources they have to reach an outcome. Number two they always figure out a solution regardless of the situation you're in or the circumstances you have to deal with. Number three they have the belief that they can deal with anything that comes their way. And number four they can leverage what they have to achieve great things. So in this video I'll share with you 9 things really resourceful people do. If you're new here consider subscribing so you won't miss other interesting videos like this. Number one they are open-minded. To be able to achieve your goals you must be open to receiving new and differing ideas from yours so that you can embrace an array of possibilities, opportunities, suggestions, thoughts, views and even experiences outside of yours. To be able to push yourself beyond what everyone thinks is possible or achievable means that you are determined to succeed even when every external factor seems to be saying otherwise. For this to happen it means that you have to have an open mind and are willing to try out new ideas that can increase your chances of success. Open-minded people are always willing to step out of their comfort zone and this is one trait of resourceful people that makes them succeed. Number two they are self-assured. If you don't believe in yourself then nothing you do will make sense because you'll only be doing a trial and error work with zero confidence in yourself and abilities. According to Dr. Robert Antony an American organizational theorist and professor you can have anything you want if you are willing to give up the belief that you can't have it. Believing in yourself is the first step to getting things done even when they don't look like it. Thomas Jefferson an American statesman, lawyer and founding father who served as the third president of the United States once said nothing can stop the man with the right mental attitude from achieving his goal. Believing on earth can help the man with the wrong mental attitude. So know your value, your talent, ability and work ethic. Appreciate yourself for these things and your ability to push yourself to success. Take a look at your past successes and know that if you achieve those in the past you can do much more this time around. Be confident and believe in your abilities to overcome any challenges on your way to achieving your goals. Number three they are proactive. To be proactive means that you are not depending on chances or luck to get what you want or be successful. George Bernard Shaw an Irish playwright, critic and political activist said the people who get on in this world are the people who get up and look for the circumstances they want and if they can't find them make them. People do not believe in putting their dreams on hold until they find the right set of people or resources. They go after what they want. They create their own resources and networks. They don't allow themselves to be stopped by the circumstances surrounding them or allow it dictate what their actions should be otherwise they'll settle for less. They'll find and create solutions however necessary. Number four they arm themselves with knowledge. Arthur Ashe an American professional tennis player said one important key to success is self-confidence. An important key to self-confidence is preparation. Self-development including learning how to be creative, how to use one's perspective are some of the things resourceful people keep learning. They know that it's the only way to come up with ideas that can help them achieve their seemingly impossible goals. The true potential of a situation isn't always easy to recognise. However, arming yourself more with knowledge helps you find ways to provide more value to people and this in turn places more demand on you and increases your chances of success. Number five they are honest about their weaknesses. Self-denial is one of the killers of growth and success. Resourceful people find out what they are good at doing and what they aren't so that they don't try to do it all in a bid to enjoy some self-glory or pride. They delegate tasks, they handle the things that they know how to do best and as for their weaknesses they allow for the strengths of others to cover up for them. They give themselves time to think. A popularvoltaire of French Enlightenment thinker and writer quote is that no problem can withstand the assault of sustained thinking. When you dedicate yourself to critical thinking there's almost no problem you won't be able to solve. According to Stanley Arnold, every problem contains within itself the seeds of its own solution. However, you must be willing to find the solution by taking the time to think critically about it. Number seven they leverage what they have better. Say you know how to speak about 10 different languages. If you don't know how valuable or how much value you can provide to others as a result of your knowledge in these different languages, you might never make the best use of that skill. Resourceful people on the other hand recognize how valuable they are and can use their values to create the opportunities that they desire. Number eight they welcome their problems and challenges. The more problems you solve the more experience you will develop. By doing this also not only will you be improving your problem solving skills but you'll also be shifting your mindset from fearing problems to learning how to embrace them so that you can find solutions to them. Resourceful people always welcome their problems and challenges so that they can find solutions to them. Number nine they are persistent. Resourceful people are persistent. They don't believe in giving up before a problem is solved. Otherwise they haven't succeeded in accomplishing anything. They believe that every note pushes them to the yes that they desire. To achieve what you want you shouldn't have to rely on the resources you have or haven't got. Your ability to become a resourceful person depends on how you use what you already have. It is never about your resource but about your resourcefulness which is your mindset. Last words Eric Thomas once said when you want to succeed as much as you want to breathe then you will be successful thank you very much for watching our videos if you like this video watch more videos on our channel and subscribe we love you


So we hope that we can keep this schedule and that means the coffee break will be starting ten minutes later and will be ten minutes shorter so that we are back in time. And to keep it short, I will just introduce you an old friend of mine, Nicolas Bredesh is going to tell you about evolution in collective robotics. Okay, so thank you, thank you for the introduction. I would like to first start by thanking the organizers, so far it's a really great conference for me because I'm not really from the fields which have been presented so far, so I've learned a lot and so thanks. I'm going to discuss about embodied evolution in collective robotics. So my original field is computer science and I work in a laboratory which is in between biological modeling, robotics and artificial intelligence. So it's a lab in Sorbonne University which is in the center of Paris. So the basic idea of what I'm interested in is illustrated in this picture. So the basic idea is that we have this bunch of robots which are in a box. We want to put the box in some environment we don't know and we want to release the robots and want them to be able to figure out what is to be done given that we have defined a loose objective, for example, gather some objects or explore the environment and the challenge is due to the fact that you don't know at first what the environment looks like, what you must do to actually complete the task. So there are many things that you discover once you are already in the environment. So to define a little bit further the class of problem I'm interested in, it's problems where there is a high level definition of the objective. For example, you define that you want to get your robots to forage items in the environment but you're not capable of defining how they should do it. You don't define the behavior that they should do it. So you have a very loosely defined metric that gives you an idea of how good it is performing, how good the swarm is performing and how good it is performing compared to what it did previously. I consider also robots which have limited capabilities, that is they have limited communication, meaning that they can't send that many messages and that they can only send these messages in the neighborhood of, in their neighborhood. And also I assume that these robots have limited computation power. So it's not possible to wait for the whole robot to synchronize to make decisions. And really this is a decentralized robotic setup. And last year I consider open environments that is an environment where you don't know a priori what the environment looks like and there is no teacher that is capable of helping you once the robots are deployed in the environment. So this is a quite specific problem setting of course and what we've been doing for experimenting with this kind of problem, well to do our tests, to do our research, we mostly work in simulation and also we work with several kinds of robots, of swarm robots. So these are examples of what I'm doing. So here you can see an image of a team of robots extended with Raspberry Pi, which are working in the lab. Also of kilobots, which is the second picture, which you have already seen in other presentation. And lastly we also use microbeads, which are micrometer beads, which we functionalized with biomolecules so that they can send and receive message and they move just by a Brownian motion and stop by being attached to one another. So I want to really discuss these robotic aspects in my presentation. I will show a little, some video of robots, but mostly it will be simulation because in terms of methodology, what we do is once in a while we go to the real robots to be sure that we are not doing something which is out of the simulation, which is just out of focus with respect to the real problems we want to achieve, to tackle. But also we do a lot of extensive experiments to really understand the way the algorithms are working. So the thing is that when you are in front of this kind of problem, there are not so many methods that you can use. It's a learning problem because you want to tackle new, well you want your swarm of robots to be able to acquire new behaviors that will be defined by how the environment is. There is a strong influence from the ecological aspects of where you are. So the goal is to design, my goal is to design lifelong learning algorithm, lifelong because the environment may change through times for these swarm of robots, that means in a decentralized distributed system. So as I said, there are not many methods that can be used in this context. Reinforcement learning for multi-agent system is quite limited. Usually you've got some nice theoretical results but it cannot be implemented in the real world. Or when you implement things in the real world, these are very simplified learning methods which have nothing to do with what is developed in the theoretical framework. So there are pros and cons for this. One approach which is quite efficient, which is a good candidate, is evolutionary robotics. So evolutionary robotics combines, well, apply evolutionary computation, evolutionary optimization for optimizing the controllers of robots. So it has been introduced quite some time ago in the 1990s by several people, including some people who are actually in this room. So I guess you will recognize yourself. And this is very efficient because it's a stochastic optimization method. That is, you don't have to know that much about the objective to tackle. You have to get a loose definition of the objective in terms of a fitness function. You can manipulate some very exotic representation where you can explore exotic representation space. So it can be parameters but it can also be structure. And it gives quite good results. These are materialistic, so it gives approximate results. So this is quite fitted for swarm robotics and learning in swarm robotics, but yet it is not really applied to online robotics. So just for those of you who don't know how it works really quickly, you start with an initial population of candidate solutions, which can be parameters of a control model. Then you evaluate these candidate solutions in simulation or on the real robots. Then you can rank these different solutions in terms of the performance that the robot achieved with these parameters. And then you operate a selection and then variation of these solutions in order to select mostly the best of the solution so far and to build new solutions which are more or less closely related to the previous solution.  So the next step is how to adapt this in a distributed setup for online learning. And this is possible thanks to another framework, which is an extension, which is an instance of the original evolutionary robotics framework, which is called embodied evolution. So it has been introduced by Richard Watson some less than 20 years ago. And it has been well developed quite a lot in the last 10 years. So the idea is that you still take this evolutionary computation machinery but you put it in one robot. And these robots, each robot will run an optimization algorithm. But then what you will do, what you will modify is that you will add communication, you will take communication into account and each robot will spread its own parameters, its own genome to nearby robots during the different encounters. And after some time, the genomes that you have received, the parameters that you have received, you will run an evolutionary algorithm based on the fitness values of these different received genome and then select a new genome to act as your active genome that is to fit your controller with some new parameters. So it looks like an island model where each of these little robots are running an algorithm and exchanging material, exchanging information so as to increase performance over time. So this is not any more a stochastic optimization algorithm even though evolutionary computation still is, of course, but this becomes a distributed online learning method because, well, you are running online, you can, well, you don't care about re-initializing the position of the robots, you can really run it for a long time. You have a distributed algorithm because each of these little islands are communicating with one another so it can take time for the whole population to converge towards one particular solution and that's it. So the main difference with the classic evolutionary robotic setup is that in the classic evolutionary robotic setup you build a situation in the lab, you optimize under a specific condition and then you obtain a solution which you then deploy in the real world. While here, what you do is that you deploy your robot and then you let the algorithm learn new behaviors while it is already deployed. So you deploy then learn and that makes things quite different. So I'm going to walk you across vanilla version of the algorithm so that you really understand where the mechanics. So how do we control the robots? What we call a genome is just a set of parameters like weights of a control function which can be an artificial neural network or a linear combination of sensory inputs. So this is the first box on the left where you have a genome, so what we call a genome which are specific values in this example for something which is then going to be the controller. And how you can see here that these parameters are then used to compute the motor value, the left and right motor value of this little robot based on the sensory input which are the infrared, so proximity sensors of the robot. Here you've got four proximity sensors, two motor outputs and you combine these proximity sensors using these weights to get the motor outputs. At each time step this is what you will do and of course if you change the parameter then you will change the behavior of your robot. It's some kind of genotype to phenotype mapping. And so the thing is that the algorithm actually the evolutionary algorithm runs once in a while for a long time we just let the robot goes through time. They will act according to their current active genome which will be the parameters controlling the, while parameterizing the control function that will move through the environment possibly gather some items if it's a foraging task. This is just one example among other. And then at the end you will run the algorithm. So at each step you have to see that whenever one robot encounters another it will transmit its own genome information along with its fitness function, its performance, an assessment of its performance. And then at the end you will run this algorithm which is very simple. First you delet your current active genome. Then you lose the parameters of your control function. Then you select one of the other parameters which were received during your lifetime. Possibly using the fitness values of the different genome to force the buyers towards better performing genomes. And then you will apply some variation. So typically it will be mutation, Gaussian mutation over the parameters to get a slightly different new genome to explore in fact the vicinity of the original parameters. And then you will use this genome as a new active genome to program your control function. And then you will start again. So this is very simple. The real algorithm we put in the robots are not that much complex. Actually I had another slide which I removed where I just showed you where the algorithm, the real algorithm is just like 10 to 15 lines. So very easy to implement including in very low powerful, in very simple robots. So if we take this algorithm and let's see it another representation of the scenario of one lifetime. Here you have got the three robots that we saw before. The number in the robots are the fitness function. The fitness function is actually the number of the fitness value, sorry. And the fitness function is the number of items that you have gathered in the environment. And so this is the fitness value. And here you have the reservoir. So this is contained in each of the robot. Of course it's not centralized. And here we're going to record the other genome, the incoming genome and the values of the fitness value of each genome at the moment it was transmitted. So what you see is that your robot are moving around. They are gathering items. And at some point they will stop and they will do this. They will execute the algorithm I showed you before. So actually the blue robot here got one genome. The genome of robot red. And at this time when they met, when they exchanged genetic material, the fitness value of the red robot was one. The red one got two genome from both robots with different fitness value. The green with two because it got two items and the blue. And the green one is similar to the blue one. It got only one genome from the red robot. The interesting thing is and what actually the distributed aspect of the framework does is that there are several selection pressure. It's not as in evolutionary computation, classic evolutionary computation. When you are in zero dimension, here you've got two selection pressure. One is coming from the fitness function. That is the green robot is actually the best at foraging. And whenever it will spread its own genome, it will be for sure selected because it's better than any other one. But the red robot was not better in terms of fitness function but was better at spreading its own genome. So it's best in terms of mating. So here you can see that there are two selection pressure, one at the individual user defined fitness function level. Another one which is just related to the way the robot will move in the environment and which is not covered by a fitness function that is written by a user supervisor. So this impose some trade-off to be explored and to be done. And this is some things that we've been actually studying, of course, which I won't tell in this presentation because I want to stick in 40 minutes. So we did several experiments with this, of course. The first experiment we did was we put it in real robots. So here you have a swarm of 19 epochs robots. So the epochs robots are the one you see here. There are quite simple robots with sensor proximity sensors here, bumpers also. And here it's extended epochs actually that were developed at the Bristol Robotics Laboratory where we could travel some years ago. And we add something else also to these robots. We virtualize actually local communication. So this little circle shows the diameter of communication, the communication for these little robots here. So you can really see that it's local communication. And we also add another object, the white one here. It's not a robot, it's just a passive object. It's not useful. If you get to this object, you don't gain anything, no energy, no whatever. Nothing. But everybody sees it. Everybody sees its orientation and distance to this particular object, which we can call a landmark. And so in this particular case, the thing is that because you have several kind of selection pressure, you can even remove the selection pressure which is defined by the user-defined fitness function. So this is what we did in this experiment. There is no fitness function, no objective to be achieved. We are just studying the selection pressure due to the environment. So if you look at the, so it's a video with 19 robots, it's accelerated. And what you can see is that this landmark here, at first people, robots are ignoring it. But after some time, they will gather around this landmark. And after some time actually, but they are pretty much around it, most of the population, and we will move it to another place just to check if they are in fact interested by the position of the landmark. And the reason it does so is because when you've got a landmark, a meeting point, well, if you go to the meeting point, you will meet anyone else that is also at the meeting point. If you ignore the meeting point, then you will be anywhere in the environment. So your probability to meet some other robot is higher if you go towards one particular location, which everybody has spontaneously agreed on without any consensus. And once you're around this landmark, the thing is that if you meet, if there is a robot which is not driven by the landmark, which doesn't care about the landmark, if it goes by chance just near the landmark, it will face a family of robots with very homogeneous genotypic signature while he will still be alone spreading its own genome. So the probability is that he will be invaded by these very homogeneous genomes which are over-represented, and his genome will disappear. So it acts as an attractor, actually. So actually, we did some other experiments, so this time in simulation. So we did it with several number of robots with very the condition. We found actually the same results as with the real robots. Of course, we do it with 4,000 robots because we don't have grants which are funded enough to buy 4,000 robots. That's unfortunate, but that's life. And what we found is similar, but what you can see here, so these are 4,000 robots and we put several landmarks in the environment. So these are the same as the one you saw here. And the thing is that the robots are the same. They perceive their proximity sensors. They are driven by an artificial neural network which weights are evolved. So it's quite a small list. And they know the orientation and distance to the closest landmark. And this is where it's important. And what we see are three attractors, actually. The same as in the video with the real robots here. There is aggregation around the landmarks. But also we can see these robots. So it's not dynamic, but what you see when you see the video is that there are some robots which I've learned to just do for wall following. And this is very interesting because then the environment becomes one-dimensional. Just going in this part and some other are going in the other direction makes it very easy actually to meet many, many other robots and without any cost, just you have to, well, there is no cost but you just have to follow the wall to spread your own genome. So it's quite an efficient way. And the third one which was actually surprising when I saw this at first is that you have some kind of Voronoi frontiers which are emerging too. Which was actually unexpected. And these Voronoi frontiers are just emerging because there are some robots which by chance at first were fleeing from the landmarks. But the thing is that when you flee from several landmarks, you end up at the frontiers. And these frontiers also, except from this little point here, also a one-dimensional space in which your family of genome will be very robust and will meet with many other robots that have the same genetic signature. So the interesting with this thing is that we studied quite a lot of things. We observed quite a lot of dynamics, of evolutionary dynamics leading to behaviors which were actually shaped by the environment. So in the next step here, we also observed the interaction between this environmental selection pressure and user-defined fitness function pressure. And actually, they are working once, one against the other sometimes. And it's not really easy to balance between the two because if you want to favor the user-defined fitness function, you can end up with breaking the algorithm just because you will keep it from favoring the encounter of other robots. And then the algorithm will not work anymore. So what we also did was we studied task allocation. So in this setup, we have several robots. We have two kind of resources. And we have to choose among the two resources, actually. So we studied this in two different kind of environments. A separate environment, when you have two patch of resource. So the two patch are of different type and another one. And they are moving through time also. And one other time, where the two patches are the same position and this position will move over time. So here, we call it the separate environments, the separate patches actually. And this is collocate patches. So we call it the collocate environments. And in this setup, what we wanted to study was the ability for a whole population to perform task allocation or specialization. That is, we wanted to force that one half of the population would go on one resource, while the other half would go on the other resource. So it's a quite classic foraging setup with specialization, of course. So we have a fitness function which counts at each time step the number of energy, the amount of energy that you got. And to compute this, well, you rely on an additional gene which gives you your ability to synthesize energy for one particular resource. And we define this gene, so between minus 1 and 1. But what is important with this gene, which we call gene scale, is that, depending on the value, you can only synthesize energy from the first resource or the other resource. You cannot have a generalist. It's not possible. You must specialize. So the expected result is that you should have the population dividing in two sub-parts, two sub-populations, each specializing on one kind of resource. At the individual levels of origin tasks are mutually exclusive. But at the population level, each resource only gives enough energy for half of the population to survive. So you really want your population to be divided upon the two resources. And so what happens when, so this is an experiment with the separate environment. You've got these two patches. They are moving through time. And I think you see it on the screen. You see that the robots are moving and following the task. So they are both able to synthesize from the patch they are on and also to follow the right patch. But the thing is that it's quite different when you look at the environment where resources are co-located. What you would expect is the same kind of thing. But it's not. So here what you see is that here, so these are for the two environments, this is the number of individuals which are alive. That is, they have enough energy to keep on going. And here in this environment, you see that we're very close to the maximum. It's an experiment with 200 robots. There are 50 replicates. And this is the value of the gene scale, which you can see is actually specializing. And you really see it at the level of the population. It's a head map of the values of the gene scales of the population. And you can see at the first it's quite random, of course. And then you have two clusters for each resource. While on the co-locate environment, things are very different. You've got only half the population which is surviving. And actually, when you look at this, the gene scale has only one value. It could be the other way. It depends on the run, of course. But the thing is that it cannot succeed. It completely fails at specializing in this context. And the reason is due to the way we define our task. There is not a great benefit to forage in the resource, which is the less foraged. And because we use not a very big number of robots, like in this experiment, it's 200 robots, the thing is that if there is disequilibrium at first in the initial population, then it will be very unlikely that we will reach a balance. That will become more and more unbalanced. And there will be a bias in selection because of the small population. It will just end up with one genotypic signature in the population. And once it is done, the mutation operator is, well, there is a very low probability to have a change. Because the invasion barrier is very high, we would need more than 50% of mutants rising at the same time to go towards the other resource. So this is something that really is a problem with disequilibrium. And actually, we did some numerical simulation and more experimental simulation in robotic simulation. And what is shown is that actually, there are several things that matters. So we tried several population size. We tried several densities. So this means that we have an abstract graph where the nodes are robots. They are supposed to be abstract robots. And the arcs between nodes represent communication between the agents. And in this case, what we can see is that when the population size augments, then we are able to retain the specialization longer. The second thing is that when the density is increasing, so when you are going from a very sparse graph to a more dense graph, and not that dense actually, then it becomes too difficult so you cannot maintain specializations. So specialization occurs because of some kind of geographical separation. So here, it's just sparsity, but in the robotic simulation, actually, we implement, we model geographical separation. And the last thing is that we also made some experiments with the selection pressure applied by user-defined fitness functions that capture actually the foraging, the performance with respect to foraging. And the more artificial selection pressure you put, the worse actually the algorithm is working. So it's an interesting result because it turns out that even if we want to help the algorithm by explicitly what it should be done, that is foraging of resources, then it turns out to be counterintuitive compared to letting just the environmental selection, which actually captures the fact that if you don't get energy, it will just stop moving and stop executing the algorithm. So this is quite interesting, of course. At least we think it is. We know that embodied evolution is quite a good candidate for doing swarm robotics lifelong learning. And we have several results with respect to this, which I won't have time to discuss. But the thing is that there are some limits also. We are, because of the complexity of the interaction between the algorithm and the environment, it's quite difficult to find solutions to pinpoint what are the real problems of these algorithms. And we are more or less creating some simulation, observing at the phenotypic level what is happening. But it's difficult to say what's not working. So we end up with some kind of analyzing rather than improving the algorithm. So and we know that as we just saw, for example, specialization and some other kind of cooperation behavior, like cooperative venting, it's quite difficult to achieve. So what we have been doing recently in the last three to four years is that we took a step back and actually tried to model to find some formal model of collective decision tasks, of cooperative tasks, and tried to control the environment so that we can really pinpoint what's not working and how we can really solve this kind of problem. So this is, in fact, what we did. So in this work that I'm going to present, what we do as a methodology is that we start from evolutionary game theory. In evolutionary game theory, you know that there are some very well-defined games. We know that, we know the dynamics of these games. These have been quite extensively explored. So and they are highly used in modeling, in biology, in evolutionary biology, of course. So we take these games and then we look at the results. Of course, they sometimes do not match with what we observe when we do the same within our simulation or with our real robots. And then we try to add simulation of the coordination mechanism, that is the mechanistic aspects of interaction, of physical interaction between agents, and we try to see how much it changes actually the games that we are studying. So the stag hunt is a quite famous model. So it's the case where you've got two hunters and these two hunters have the choice to hunt either a hare, which is some kind of rabbit, or a stag, which is a larger animal, where there could be danger if you try to hunt it alone. So the payoff matrix here says that if you try to hunt a hare, you're successful and you're going to get one point as a result here.  Well, actually, if you hunt a stag, so if hunter one hunts a stag, you will get zero because it's too risky, because it's too dangerous, because the stag is too powerful or whatever. And the other one, well, we're still hunting the hare, we still get one just as before. And but if both hunt the stag, then you will get a higher reward. So this is quite different from the prisoner's dilemma because in this case, you've got two equilibrium. You should not deviate when you are both hunting the hare because if you deviate, the other one will still have the same gain and not you. And you should not deviate if you're hunting the stag because, okay, maybe it will cost something to the other, but the thing is that it will also cost something to you. So you have this payoff dominant equilibrium, but you should stay. And this is a risk dominant equilibrium. So these two Nash equilibrium, you should not go away from this equilibrium. As you saw, it's not a stag, it's a lion. So the thing is that when you take this numerical simulation, when you take, sorry, this game theoretical framework and you do numerical simulation or analytical simulation, there is the effect of genetic variability. That is because of, well, it's called drift selection. That is when you've got your gene, there is some probability that you will change the value of your gene. And of course, if you're alone, you will just go back to the previous stage. And if you start with both hair and dirt, the thing is that, well, it will still act as an attractor. But of course, drift selection, when you've got only one gene defining the ability to enter a hair or a stag, the probability that both individuals will mutate at the same time is quite high. And then thanks to drift selection, actually, you will end up with this kind of run. So these are numerical simulations where we have 30 runs, I think. Yeah, 30 runs. When we have 30 runs where you converge toward everybody's ending the stag, that's a solved problem. You've got some oscillation also because drift selection is not about converging to a stable state, but oscillating between several states and you look at the frequency at the time you spent in each state, in each equilibrium, and the pay-of-domain equilibrium is the one that you spend the longest time. So that's great, but if you put it in simulation, so in the setup that we are interested in, if you introduce physical interaction, maybe things will change a little. So what we did for that, so this is the same evolutionary algorithm that I showed at the very beginning. This is control setup. By doing this, actually, we forget about the mating problem. We remove the mating operator from the picture. We completely control the environment. We put two individuals, two robots, which have sensory inputs, which can also sense the type of the object they are seeing, if it's the other enter, if it's a stag, if it's a hare. So hare are green and stag are violet, purple. And we then define a pay-off matrix, which is the same as before, except that we boost the values so as to take into account the fact that they also have to travel, so it's not just one and two. And we do some experiments, so I won't go into the details, but we check that there are enough evaluations so that it's not just fitness noise, and we vary the number of prey so that we know that it's not too particular. So if you do this, the kind of results you get is this. Actually, what we saw previously just fades. It's not predictable. You end up with these individuals. So I did not explain the figures. These are the number of generations. This is the percentage of successful stag hunting. And this is the... So for all the runs, the inevitable runs, we look at what they are hunting. And so here, as you can see, well, they are all green, almost all green. So it means that all runs have the best individuals in the end which are actually hunting hare. There is no transition towards stag hunting. And for all these experiments, we start with the worst case. That is, we pre-optimize the behavior that all hunters are hare hunters. That is, they are in the risk-dominant equilibrium. So it fails. It completely fails. And that's not a good thing, of course. And the thing that you could argue is that here it's a case of mutualist cooperation that these individuals are not related. What will happen, of course, if individuals would be related? That is, we know that if there is an inclusive fitness at work, you may quite easily evolve cooperation in this kind of case. So this is what we did. It's not so great. So we take an extreme case of relatedness. It's completely artificial. Of course, we take clones. So when you hunt with a clone on yourself, there is no pairing between a different kind of individual. And still in this case, it's not so easy to evolve cooperative hunting on the greatest prey. So you could say that if you let it run longer, you've got some transition, but it really takes time. In the end, probably, they would all transition. We did some much longer run, but it really takes time. So we didn't converge all the runs to stag hunting. And in this case, what you can see is that, on the contrary, so the blue arrows are pointing the runs for which the successful stag hunting was more than 50%. And what you can see is that there are actually hunting stags failing quite a lot of time. And also, well, more or less, failing as often as they are succeeding in hunting the stag. Okay, and we did also something, but I will be very quick on this. We changed the payoff matrix to introduce some kind of recycling pathway. So it's beneficial to hunt the hare when you are two, because we wanted to force the evolution of hunting the hare just to see if the transition to the stag, which is now facilitated, would be easier to observe. And that's actually not really the case. It's even worse than with the cloning setup shown previously. But what was interesting with this experiment, with the cloning one and this one, is that we actually got a glimpse of the strategy that were used by the robots to solve the task. And what you can see is this, so of course these are robots, not animals, but they are first wandering around and once they found one another, they are turning around one another in order to hunt the different prey. And this turning is quite efficient, but also loses a lot of time and energy and sometimes fails just as it just failed now, but makes it possible to hunt the stag. So from this, there is a question, and this is the last question of my talk, is that, okay, why they do not evolve some more complex behavior, especially when we have the recycling pathway. That is, robots are supposedly different and they may be able to take roles. And of course, maybe taking roles could be interesting. Maybe they could be more efficient at hunting. So in order to do this, in order to explore this hypothesis, something which is very arbitrary, is that we try to complexify, to enable more complexity in terms of behavior. So theoretically, if you've got a neural network with enough connection and nodes, it is possible to have a universal approximator and whatever, but in practice, when we did it, well, it was quite simple behavior that we got. So even if it's theoretically possible, we forced the representation to be able to represent some things which could be forked between two behaviors. So we added a new mutation operator, which is a duplication operator, which is inspired, in fact, from gene duplication, where you just duplicate the same gene and you let both gene with the same function to deviate. Of course, it's artificial, so no biological realism here. But here we duplicate rule network. So the idea is that these one robot could either have one network or two robots, two networks, and when they have two networks, they can choose when they are cooperating, when they are hunting together to switch from one network to another. So in terms of genetic encoding, this means that you have now two networks mutated and diverged. You have this gene duplication, network duplication operator which can create two networks out of one, or when you've got two networks, just a blade, one of the two. So maximum you have two networks. And during the lifetime of the robots, during evaluation, you have this choice, so we had also several strategies. You can choose among the different networks to assume some kind of different roles, to force that different roles are possible. And we did it, so a slightly different payoff matrix, but it's still the stag ant. It retains the same property as before. And what you can see is that with this gene duplication, you have really a rise, very quick rise in the number of runs that end up with successful cooperative hunting on the larger prey. While this is the control which was the previous experiment, which grows but much, much slower. And actually if you see at what they do and if you analyze the results, you see the following. You've got a very different strategy. You've got a symmetric strategy. So gene duplication, network duplication makes it possible to break symmetry. And you've got a leader follower strategy. So of course, in nature or without the robots in another environment, it might be different. But one thing which is important in these results is not the fact that they are moving that way, it's the fact that it is at symmetrical and that there is a leader. Because if you look at the original payoff matrix, which was a coordination problem with two players. But when you have leader follower, you completely change the game. In fact, it's not a cooperative game anymore. It's a game with only one player, because it is copied by the other. So if it switch from the herring thing to stagnant thing, then it's just one switch. If the follower doesn't care about what it's hunting, it's just following the previous one. So this is about turning a cooperative game into an individual optimization game. Which is of course much simpler. So this is quite interesting because of course this was not captured by the original game theoretical setting and this is something that actually can happen if you model the physical interaction between individuals. So it works with robots. It might work in nature though I don't know. Because I'm not, well I don't know. And that's it. So that's it. So I'm going to conclude. The only really important icon message that I knew I would be late so I watched it in red. So I'm working with swarm robotics and so what we think is that if swarm robotics is to be successful, well we are in an unknown environment and we cannot predict anything. So we must also consider learning capabilities in this swarm robotics. Of course it's difficult because it must be online, because it must be distributed if we are to achieve optimization in the real world. And that's about it. I will finish by thanking the people who collaborated with me and thanking the funding which are important but less important than the people. Thank you.