 Welcome to another Opta Planner video. In this video, you're going to learn how to schedule conference talks optimally. So here, for example, we have a number of conference talks assigned to rooms and to time slots. By doing that more efficiently, we can create better schedules for our attendees. This is actually really in use by Vox Zurich, which is a Java conference in Switzerland that recently sent out their accepted talks so they could start scheduling those talks into rooms and to time slots, and they used our Opta Planner example to do this, actually. And besides learning about how to schedule conference talks more optimally, I'll also talk about how to deal with rockstar speakers who like to party, because that's one of the constraints, of course, that you might have to deal with as a conference organizer. So let's get started. So here's a general overview of how the application works. The conference scheduling app works. It basically takes an Excel input file or a LibreOffice input file, very defined in your rooms, your time slots, your speakers and your talks and your constraints. You give that to the application and it then optimizes that to tell you for each talk to which room and to which time slot it should be assigned. Now, for those of you who are developers and you don't need to be in a developer to use this app, for those of you who are, you might wanna look into the box there because this is actually written in Java and the Excel file just gets transformed into plain old Java objects, into a room class and so forth. So if you want to integrate this with existing technologies, REST technology or anything like that, that's all possible. Then what the application internally does, it actually gives this to Opta Planner, which is our constraint solving engine, and it's optimizes that returns the solution to that and then we simply return that back into an Excel file. So let's take a look at the Excel input file if you want to use this, all right. So here's actually the app. So I'm going to take this empty, this uninitialized input file. So here we already defined a number of things, let me zoom in a little bit and let me start at the time, so that I explain the constraints in a few minutes. So first we define our time slots. So we define in this particular conference, we are holding it for two days and we have on each day, we have a number of time slots. So we have the normal breakout time slots, the normal conference talks, which last about 45 minutes as you can see, right. There's one from on Monday from 10.15 to 11 o'clock and we also have labs, which span two hours instead of just one hour, right. So you can see some of these time slots actually overlap, right. Now if you're more in advanced conference, I'm thinking for example, like DevOps, you would define your deep dives here, your conference talks, your birds of the feathers, your workshops and so forth, right. Those are different type talks and for each of those you will have time slots. So you just define those. One extra thing we can do here is you can actually define tags on these time slots. Here there's no defined, but for example, this is the talk after lunch. So you might actually fill in here after lunch, right. And you can define multiple tags. You just have to separate them by a comma, but here we just take one tag and this one is also, this one is not after lunch, okay. So and why is this interesting? Because now in your constraints, you might say certain things should not happen into a time slot that's after lunch. For example, if you have a rock star speaker, you might say, well, let's not give him a talk after lunch is if he's talking about a very difficult subject, right. So you might wanna avoid difficult subjects after lunch. Okay, let's take a look at rooms. So here we have 10 rooms, room one up to 10. Same thing again, we can define tags here. So here room one is actually a large room and it is a recorded room. While room two is not a large room and it's not recorded. So you'll see of course some speakers, we wanna make sure that they are assigned to the large rooms and that they are recorded because they are important rock star speakers, let's call them like that. And other speakers, this is a lesser constraint. It's nice if they would be assigned to those rooms, but it's not a hard constraint as it is for some other speakers. I can see this is a lab room, room five and room 10 is also a lab room. And besides the room, you also have to define when these rooms are available because not all of your rooms might be available all of the time. So you can see here that the normal rooms, room one to four and room six to nine are available for normal conference talks. The 10 to 11 slot, 11, 30 to 12, 15 slot. And in the afternoon also two slots and so forth as we scroll further till the Tuesday. But you can see that the lab rooms are not available for those conference talks but they are available for the time slots of two hours. Of course, the time slots defined here need to match those in your first sheet here, of course. If that is not the case, Opto Planner while reading the Opto Planner example while reading your application while reading your Excel file will give you a very nice error message and tell you exactly which cell in this spreadsheet there is a mistake and so you can fix it. Of course, we have speakers. This is a generated dataset. By the way, you'll see that to the, if you look at the speaker's names that you have a number of speakers here which will define a number of constraints on but I'll just switch to the talks first. So here we have talks. So each talk we give it a unique code and it's easy to identify it. Now you can see these are all the talks that were accepted after our CFP ended and after we reviewed all talks, right? And you can see some talks are of the type lab. In this case, we have nine lab, eight lab talks and the rest are breakouts. Of course, naturally speaking, the number of slots you have available for lab talks should be at most as many as you have lab talks. So if you have eight lab talks, you cannot have only seven talks slots and put them in. If that is the case, Optoplaner will still try to solve it but you will have two talks in the same room at the same time, which is of course something you don't want. So you wanna make sure that you limit that in advance. Every talk also has a speaker. So for example, this hands-on real-time open shift talk is done by the speakers Amy Cole and Beth Fox. Sometimes it could be multiple speakers. And this is of course one of the constraints that is a hard constraint in Optoplaner, namely that if a speaker has a talk somewhere and he has two talks, that those two talks should not be happening at the same time. Why? Because speakers have to obey the laws of the universe and they cannot be at two places at the same time, of course. So that's a natural hard constraint. You can also see we have team tags, team track tags. So what is a team track? That's basically, if you go to a conference, you might say, I wanna follow anything related to artificial intelligence or anything related to mobile or anything related to security. And the idea is of course that we try to make sure that we at any point in time, we only have one talk of a particular team at the same time. So if you wanna follow the security track, you can actually see all of the security talks while you go to the conference and you never have to pick between two that are happening at the same talk at the same time. Sector talks are basically the same thing but a different or a vertical basically, where you say, okay, this is a talk that talks about telecommunications or like education. And you will see of course that we try to do the same thing there to make sure that if you wanna follow anything related to healthcare, for example, you can do that as an attendee. Of course, every talk has an audience level. You can use this, in this case, we went from between one, two and three, but you can use one to five or one to 10. But it has to be a number, of course, because we need to be able to compare it. The lower the number, the easier the talk, the higher the number, the more difficult to talk and the more a technical experience you need to have or any kind of experience you need to have. We also have content tags. That's actually more fine-grained version of the team tracks. You don't, of course, you can use, you don't have to fill in these tags if your conference has no need of them, but we'll actually use the content tags together with the audience level a little bit later. This is really the technology we're talking about. For example, if you're talking, there's a specific opto player talk or specific TensorFlow talk or specific, where's the OpenShift talks here, a specific OpenShift talks and so forth, right? You can see, of course, it could be multiple. This is, for example, one that talks about both Docker and Kubernetes. Language is also in there. Why is that? You might have a requirement to say that at any given time, if you have talks in two languages, for example, in English and French, you might have a constraint that says at any given time, there should be a talk in French and there should be a talk in English. So that if you have attendees who can only speak one of the two languages, that they can still follow a talk and at least understand the language. So that's one of the hard constraints that, of course, is supported out of the box. On top of that, we have a number of required time slot tags and so forth. So let me go through this. So what does this mean? Well, for each talk, you can define that it should happen in this particular time slot or that it should not happen in a particular time slot or that we would like to happen in a particular time slot or that we would like not to happen in a particular time slot. So those are the four options for each time slot talk, the tag. So for example, we might say, okay, this particular talk about TensorFlow that's going to be difficult. So let's prohibit that from happening after lunch, right? And of course, this tag name needs to match one of the time slot tags. So if I write a type of here, OptoPlan will immediately tell me that he cannot import this file because there is no such time slot tag. But if I wrote this correctly, I did have an after lunch time slot tag the exact same written the exact same way. So this will be read in correctly. Okay, similarly, so we can do required means that talk needs to be assigned to a time slot which has that tag preferred, which means we would like it to be like that. So we're going to win some soft points by doing that. But, or we're going to lose some soft points if you don't do that, but it's not a hard constraint. There's a hard and our soft constraints. Prohibited again is hard, which means that if it has that tag, it should not be assigned to it. And then the desired is then the soft version of the prohibited basically means we would like to avoid it. Similar to the time slot tags, we have these four columns for room tags. So you might say, okay, this is a tag, this is a talk which is going to track the large audience. So we want to, for example, have that required that into a large room, right? And you just say, right, large there. Now, these four, these eight columns here also come up on a speaker level because most of the time it's not the specific talks where you would like to do this, but it's on a speaker level. So you can just do it on a speaker level too. So for example, here goes Poe, it's one of our rockstar speakers, right? So we are definitely going to require a large room for him. And it's going to definitely need to be recorded, right? So we'll just add that as a hard constraint. So that's an easy way to make sure that those people end up in the rooms you would like them to end up, right? The speakers, furthermore on the speakers, you can also define when they are available. So you can, for example, Amy Call is available all the time, but for specific speakers, you might have requests that they say, okay, my flight is only arriving in the morning, so I cannot do any talks during that morning because I won't be at the venue yet. In this particular case, just Poe is a rockstar speaker, but he also likes to party. So he's known to go out quite late and we as a conference organizer are trying to take that into account by not assigning him any talks in the morning because we really don't want to be in a situation where you have a full room but no speaker, right? So here we've done that by simply blinking out those three all of the morning talks so he will be assigned to a talk in the afternoon. So that's another hard constraint there if a speaker is not available during a specific time slot, he will not, his talks will not be assigned to those time slots, right? Okay, let's get back to talks. So those were all those columns there. Furthermore, one extra thing you can do on a talk is, so here Optoplan will write down when this talk will happen, right? So this particular securing hibernate talk, it has no time slot yet. We don't know when it's going to happen or which room but Optoplan will fill that in for us. But there might be an exceptional situation where you say, okay, this particular talk here, the troubleshooting reliable Android talk, that needs to happen Monday morning at 10.15 in room one. I just know that as a conference organizer and I don't want to debate whether or not that's adheres to the constraints or is more optimal to put it there. I just want Optoplaner to have that talk at that time because I'm in control, I'm the user, right? So what we do is we spin that talk. That basically means that Optoplaner will pin that talk there. He will make sure that to look at the speakers to make sure he's not assigning any of the other talks of those speakers at the same time and so forth. He will take into account all of the constraints but he will not alter the room or time slot of this particular talk, which is of course something you might want to do for keynotes, right? So you might not even, in this particular case, most of the time you will not even put keynote talks into these things because you'll just plan those separately. But if you do have other talks running at the same time, which is a bit strange for the keynotes, but anyway, if you are in that weird situation, you might want to do this because you want to make sure that during that keynote talk, none of those speakers are assigned a talk in the same somewhere else at the same time, right? Okay, so the yellow tabs we see here at the bottom, those are actually output from Optoplaner. So those are just views. So if you change anything in any of those tabs, Optoplaner will actually ignore that completely while reading in the file. So only fill in the great tabs of course, right? So let's see what happens when we plan this, right? So I'm going to jump back to Optoplaner. I'm going to solve this without my changes I did with the time slots though. And let me see, click the solve button, right? So first of all, how do you read the file? Well, let's maybe, so you just click the open button and you select the file you want to read, right? You have a couple of example files of course in the application. So you're gonna get started and the structure is correct. If you want to see any of these files that you loaded, for example, I can load a bigger file with 216 talks. Just click on show in LibreOffice. Do be advised that if you make any changes here, you can see this is a temp file, Optoplaner will not pick those up, right? So you can make any changes here, save it somewhere, and then simply you'll have to click the open button here to actually open where you save it, right? Okay, so we take for example, this example file, right, and we solve it. You can see here at the bottom, the score is improving and then when it is solved, we can open it, right? So here we can open it and we can look at the results. The most interesting result is of course the rooms view where we will see for each of the talks, let me zoom in a little bit, for each of the talks when which talk is assigned to which room. So what can we see here? Well, the first thing we can see is that this is a pin talk, that's why it is a purple talk. If I hover over it, you can also see this. This is a table shooting reliable Android talk by Hugo Fox, it is pinned by user as you can see. But basically, this is a signal to you that if you start pinning things, you might see certain constraints being broken because you pin a lot of talks. That's of course, you know, take it to the end to account, you're making it more difficult to find more optimal solution by pinning talks, right? That's why it's clearly purple there. This is a talk which has, which is assigned perfectly, right, it's a, so discover AI driven extreme, you can see she's assigned to room two at 10, 15 on Monday. And this creates no constraints violations whatsoever. However, if we look at this particular talk, this is the securing scalable Docker talk. This has three constraint matches. You can see those in the comment there. And of course they're all soft, that's why it's orange. If it would be red, it would be a hard constraint broken, but this is actually a feasible solution, which means no hard constraints are broken. And you can see here that she has a constraint match for the team track, which I'll look up into in the middle and for the contents, audience level flow violation constraint, which I'll also explain in a minute. Now, just to show you what happens if you would actually have a poor solution, here's actually an infeasible schedule. Now, let me just open it for a second. And you can see here, we are actually breaking hard constraints. So what that means that, and there's a number of hard constraints, you can, there's a list of all of the hard constraints right here. So the ones I've already explained earlier, room conflict, two rooms being happening, having a talk at the same time, one room having two talks at the same time, speaker conflict, one speaker having two talks at the same time, those prohibited time slot tags or and so forth, right? Those are all hard constraints. A speaker that's unavailable, that's a hard constraint. And now, if you actually look into the rooms view here, you can see there's a number of red ones here, those are breaking hard constraints. And for example, if you look at this particular one, we can see that here we have two talks in the same room at the same time, which is of course impossible. And you can see we are losing hard constraints there because it says constraint matches, there's a room conflict between those two rooms. If you look at this particular one, why are we having breaking a hard constraint here? It's because we have a speaker required room tag. So apparently the speaker of this room, either Jamie, Amy or Bed King, and let's look that up, required a particular room tag and it's not there. Let's, so let's look up Amy, so what's her name? Amy Jones and Bed King. So we have Amy Jones, here's Amy Jones. She has no real requirements. And then we have Bed King. Oh, here, Bed King needs a large room. And as you can see, they're assigned to room six. And if we look at the rooms, room six is not, is a recorded room, but it's not a large room. So that needs to change, right? So that's a hard constraint broken. And of course, the others are just soft constraints without which I'll go through. Now let's look, let's take a little bit to a much better solution here. So here we have one, which is much better, which is just, let me just check here, right? Which one is this? Yeah, this is the one. This is the one I got after I gave it a little bit longer to solve a few minutes, a minute or two, three. And so really gave a chance for Opto Planner to find a really good solution that we want to put into production. And let's see the assignments here. So we still have soft constraints broken. That's, there's basically no way to deliver a solution where no soft constraints are broken, but we really minimized the number of soft constraints. You can see there's much less orange here if you look at this solution. And let's take a look at what we have broken. Let's take a look at all of the constraints. So here's a list of all of the constraints. The first one is the team-track conflict. So what does it mean? Well, if you go to the team-track view, you can see if somebody joins the conference and the attendee goes to the conference and he wants to see the artificial intelligence track, he can now actually go first to this talk, then three hours, no talks, but then he has this talk. Then he has to make a choice. So here we have two talks of artificial intelligence at the same time, namely learning visual virtualized opt-op planner and using secure vertex. Like I said before, this is generated data. And you can see we are losing 20 soft points because of that, right? So that is, so it would be better if you can actually split this up into different time slots, but that creates problems with all of the other constraints. So that's probably why opt-op planner is not doing it, right? But if opt-op planner would have the chance, he would do that, all right? So you can see here, if you're looking security for security, you can go to this talk. Notice it is orange, but it's not orange because of, oh, it is orange because of team-tracks. Apparently this is colliding with S 44. Yeah, so these two talks are actually in overlapping time slots. You can see this is a lab and this is a conference talk, this one, but both of them are occurring between 10 and 11, right? So they are overlapping these two talks. This one, oh, say even this one overlaps with, yeah, SNL4 of course, right? So that's another difficulty. I could not, for example, by putting this one into this cell that would have not helped because we have another artificial, we have an artificial lab going on at the time. So that would actually break that soft constraint too. So I'm pretty sure it's actually unsolvable. Yeah, you can even mathematically prove there's no way to not break the soft constraints for artificial intelligence because of the overlapping time slots here. Anyway, you can see, so culture, I can follow all of the culture talks up to at least this point here. I have to make one choice where one of them I cannot attend, but that's pretty good, right? Sector views, same principle. I wanna see everything for healthcare. I can do that. There's actually no, these oranges one are about the team tracks conflict. So in fact, we lose no points for the sectors here. No, these are all for the team tracks, as you can see. So it's actually very good. We can just watch this entire, so if you wanna see the entire healthcare track or transportation that we can do that. Now, you might say this is more important, less important than the team tracks constraints. So you can actually tweak that in Optoplanar. Right now, those are these two constraints here, right? Right now, they're both of them are assigned to a weight of 10. But if you wanna say this particular constraint is twice as important as the other one, just increase the constraint to 20 before solving, of course, right? And then Optoplanar will take that new count and will much less violate this constraint at of course the expense or trade off of the other constraints. What else do we have in here? So we had the sector conflicts. Well, we have the content audience level flow violation, which is basically a difficult way of saying we wanna make sure that the easy talks are first for specific content type, content tag, and then the more difficult talks. So for example, if you're learning about Android that you first have an Android introduction before you have an Android advanced talk, right? So you can see this in the content view. So here we have a content tag for TensorFlow, which was, if you remember, on our tags, on our talks, you could add content tags if you wanna do this, right? Which are fine grained tags for our talks. And what we can then do is make sure that the level one, so again, our talks also have an audience level, right? That the level one, the talk which has level one, which is the deliver stable TensorFlow is an introductory talk, that those are actually happening. Well, before the more difficult ones. And you can see this is the level two talk, and you can see this is later than the level one talk. So you can actually, as an attendee, you can on Monday do the introductory talk and do the advanced or the medium talk on Tuesday, which is good, right? Again, we're not losing any points here because of this constraints. Again, we're losing points because of the team track confluence constraints, which is one of the most difficult constraints to actually adhere to. But sometimes we do violate it. So if we look carefully, I'm sure we'll find something. Okay, I have to really look carefully. So probably if we have something with level three early, that that should probably, I'm not seeing any right now. But I'm sure there's, I'm not seeing any. Okay, that's nice. So what else do we have of constraints? Audience level diversity. This is currently turned off. You can see zero, but you can turn this off. That basically means that at any given time, you can actually have both difficult talks and easy talks of going on, right? Language diversity, the one I mentioned earlier, as if you have French and English talks that at any given time, if you only speak one language, you can go to talk. And of course we have our tech talks, the soft versions of the ones I mentioned earlier. So that's basically the solution here. So we get this as an output. We put this, we post this to our users, to our attendees. And then we basically have a better conference schedule because our attendees can go to the talks, follow an entire track, or follow an entire sector, start with the easy talks, before seeing the more difficult talks and so forth. And it's a completely feasible schedule because our speakers can deliver all of their talks. So you probably want to try this out. So how do you try this out? Well, it's quite easy. You just go to optoplanner.org, I click on the download optoplanner button, then you will get a zip, you unzip that zip. You run, and in that zip, you have something called an examples directory. There you do run examples.sh or dot, but of course depending on which operating system you're on. And when that happens, you will see this application. So you just go to optoplanner.org, download the zip and run the examples. And when you get this application on the bottom right, you have the conference schedule thing. So you just click on that, and then you get the application I showed earlier, where you can say, okay, I'm going to take a look at one of the examples Excel files, or I am going to open an Excel file. And you, of course, you can copy any of these files to get started and then just quickly solve when you're ready to solve it. And when you want to see it, you can just save it somewhere or you can immediately open it in Excel or Libre Office. So thank you for watching. And if you want to try that, go to optoplanner.org. Bye.