DrJones:
None of what you are saying makes any sense. I'm so tired of arguing with people that insist on talking about things they simply don't understand. I won't bother to refute your latest post, I tire of it, and Nitsuja already tried to reason with you, and you ingored him completely. But it's painfully clear from all of your babble that you have absolutely no clue what you are talking about.
Expressing your opinion is wonderful, but do you actually have any programming experience or training, like Nitsuja? I program for a living, but it's just higher level BS web applications, so when Nitsuja talks about programming, I listen carefully and respect his opinions more than my own misguided preconceptions. You would do well to do likewise.
Do you actually have any experience or training with algorithms, computational methods, or numerical analysis, like I do? I am not the end all be all in this field, but it was my specialization in college. Even after all my training I still make mistakes, sometimes simple, sometimes complex, so when my peers tell me that what I am saying does not make sense, and ask me to critically examine my ideas, I listen. You would do well to do likewise.
I will pass over this paragraph, thank you.
I'm also a programmer myself, and AI is my computer-related favourite topic. I just don't understand why are you writing so strongly negative posts. I'm in no way being aggresive with you, nor with anyone here.
It would help more if you wrote here what are you reading from our words. These posts are dense and it's easy to miss something. That could be considered off-topic, but I prefer this to a long discussion about who misunderstood who.
Maybe Bisqbot could evaluate each position like a chess program does. For example, a chess program might consider a pawn to be worth 1 point, a bishop 3 points, and lots of other things like open rook files and passed pawns based on how important the programmers think it is. With LoZ, getting 5 rupees could be worth some amount, killing enemies faster would be worth another amount, and using less bombs would be another amount. Then for each possible outcome, it does the calculations and for the best ones it analyzes further as DrJones said. It works pretty well for chess so I don't see why it couldn't work for TASs if people are willing to spend the time working on making the bot better.
Xebra, you are acting like an asshole, plain and simple. Who are you to command that the people who post in the topic you started must be of a certain knowledge in a subject before they suggest things? It doesn't take a specialization in college for people to suggest things that may be a good idea. Anyone who's not agreeing 100% with you is being met with your overly harsh criticism, demeaning, and taunting. Grow up. If you are "so tired of arguing with people that insist on talking about things they simply don't understand" then stop doing it.
I think this could be beneficial, but there would have to be a reliable way to determine the "point values" for each event. If the priority of those is somehow flawed, it could potentially create equally flawed results.
<Swordless> Go hug a tree, you vegetarian (I bet you really are one)
Who cares if they're flawed? We can choose 10 or so possible point value combinations, and then find hundreds of people willing to run the program on their computer. There's probably also some tests that could be done to figure out stuff like if it's worth it to get 5 rupees. For example, we can find the spot in Phil's movie where it costed him the least time to get 5 rupees, so if it's 5 rupees in .5 seconds, then each rupee could be worth .1 points and each second could be worth 1 point. Probably some kind of similar test could be done for bombs.
Also, if I remember correctly Phil had a good point earlier in that the randomness in a room can be affected a few rooms back. What's to stop the bot from replicating whatever Phil did to find the best randomness? Have the bot randomly select 10 or so equally fast paths through the past few rooms, and for each one it analyzes each situation and determines which is fastest.
I can see what you mean by this, but actually, computers are also great at following things logically, if they are given enough information and a good enough formulation of the problem. The problem is more that most things don't follow logically from the information we have, and we don't understand the process we use to make intelligent guesses/decisions in the absence of complete information, at least not well enough to be able to tell a computer to do what we do. Also, even for things that do follow logically, it is often difficult to reduce our level of knowledge of them to a set of statements or instructions.
Sure, heuristic functions could help, depending on the algorithm used. But I'm not sure if this is the best or easiest way to convey to the bot what it should or shouldn't do. And playing this game for fastest time is much more complicated than playing chess for a win.
I would be surprised if you or anyone is able to flesh out this system and get it working anytime in the near future. I don't mean to be discouraging by that, though; I really hope it happens despite how unlikely I think it is. It's certainly possible, I know that much.
(There are already similarly multi-layer AI's in use in some places, although not ones capable of playing any game of arbitrary length optimally...)
OK, now this confuses me a bit. I thought you weren't talking about the low-level details of things because that is a layer that would be left up to Bisqbot or some algorithm to handle. Isn't "seeing" things in the game exactly what Bisqbot already does by looking at memory addresses and checking which program instructions got executed? I can't tell if you are proposing to do exactly what Bisqbot does for this, or if you mean something completely different.
Since it breaks down when either the tactics or the strategy change, and since it is likely that at least one of those was not done optimally by the human player, I'm not sure how useful this would really be.
I think Xebra is acting this way because he posted this topic in the NES Games forum with the intention of at least discussing Bisqbot as relates to optimizing Zelda 1 in practice, and because there is another post in the General forum that is more about the general things that are being talked about a lot here instead. So, it seems like it's from frustration. (But to be honest, he acts disagreeably pretty frequently anyway...)
JXQ:
I just hate reading meaningless garbage in a forum I usually enjoy, what can I say. And lots of people are spouting a LOT of meaningless garbage. For example, there is no way to evaluate the fitness of a strategy beyond "did you do something irrevocably bad, oops!" or "did you already spend longer than a human, oops!". Period. It simply cannot be done. How can you say midway into a sequence that getting hit or walking into a wall or walking away from your ultimate target are inherently worse than not doing these things? How can you say midway into a sequence that getting rupies or bombs is inherently better than not getting rupies or bombs? The POINT of BisqBot is to try to get really lucky in situations that are chaotic and unpredictable. Chess is not chaotic and unpredictable. Drops in Rockman, based on pseudorandom factors as they are, are. Behavior of monsters and drops in Zelda, based on pseudo random factors as they are, are. It is utterly retarded to talk about programming an AI or giving button sequences some sort of fitness score or anything similar. I really wish people would shut up about it. They just sound stupid to people that have any understanding at all of the subject.
xebra:
Isn't this what humans do when they play the game? If you accept that the thought process of a human can theoretically be calculated or at least approximated by a computer, then it's incorrect to say such things are absolutely impossible, and pseudorandomness is not inherently chaotic in any case; it is only aimed at being unpredictable to humans in real-time. I would argue instead that, while not impossible, it is impractical and may even get worse results than doing it otherwise, which is probably reason enough to pursue other methods first.
Just getting caught up... When I was making my suggestions earlier I was looking at it from a minimax algorithm type of process. I think that's the same thing that Boco is thinking.
Boco, might want to look into it.. it's not exactly the same, but could be altered to work. I haven't figured out exactly how though. The hueristics need to be greatly improved. I have it in the back of my mind currently. I have a little too much on my plate already to dedicate too much time to this. If I come up with something that I think might do the trick i'll post.
I'll look into other AI possibilities when i get more time.
The POINT of BisqBot is to try to get really lucky in situations that are chaotic and unpredictable.
So what's your point? Just because that's what he did for Rockman doesn't mean he can't be programmed to do more than that. Oh yeah, and I'm going to use my cool moderator authority to tell you that you need to improve your attitude or I'll... um... I'm not sure what I'll do but just make sure you're scared of me! Lol, I guess that didn't sound very moderator-like.
My suggestion: Someone tweak the source code of bisqbot with goals/path through the game(not sure how this would work, maybe something along the lines of enter x room, enter y room with z number of items, hit swith a, etc, which would take a while to plan out completely), find an old computer, run it and let it go for like 6 months and see what happens.
Do not try to bend the spoon, that's impossible. Instead only try to realize the truth.
What Truth?
There is nospoon. Then you will see it is not the spoon that changes, it is only yourself
And this gives you the right to be an asshole? Honestly I'd rather read people's ideas - the only meaningless garbage I see is your animosity.
That was the point of Bisqbot in Mega Man. If this is what you meant to constrict the thread to, then maybe you should have stated that in your first post. But when someone else talked about "pruning" the input, you deemed it off-topic "random bullshit". Off-topic? Your topic is "BisqBot Request: Zelda 1", which is exactly what was discussed, but as I have said, the people who don't agree with you 100% needlessly catch the brunt of your anger.
In the pre-Bisqbot Mega Man run, it just looked improvable when trying to manipulate enemy drops, although since it's chaotic and unpredictable, it wasn't obvious how to improve it. But it's not like Phil's Zelda run is sloppy. Yes I know, the game is chaotic and unpredictable, thanks for the buzz words. But there are 37 (if I counted right) enemy encounters, and sword/bombs are being used at about the fastest rate allowed, and not missing, and I also can't find a part where, if he had more hearts/bombs/etc, things could be done substantially quicker. That's not to say it's unimprovable, as Bisqbot can search for things that are (deep voice) chaotic and unpredictable, but I don't see much improvement from this, and certainly not 20%.
If I was as excited about an idea as you are about this, I would welcome others giving input, even if it wasn't exactly what I had in mind. You seem to think that if an idea is brought up that is not exactly what you already had, that it is automatically inferior, and this isn't the only thread I've had that vibe from you on. Also, if something really is "utterly retarded", there are more polite ways of going about saying so. You'll get more people wanting to help with this project if you don't treat them like shit.
I'm sure I'm completely wrong and you'll have a great, demeaning retort for this, but I'm done on this topic, as I have no interest in helping or contributing any random off-topic utterly retarded meaningless garbage when you treat people like this. I probably wasn't smart enough to deserve to help anyway, so no big loss for the effort, right? Get over yourself.
Good luck to everyone involved in this project. Wait, isn't luck Bisqbot's job? :)
<Swordless> Go hug a tree, you vegetarian (I bet you really are one)
Joined: 6/20/2004
Posts: 292
Location: United Kingdom
I have an idea for possibly refining bisqbot a bit, although i think this idea has already been hinted on in different places.
It got me thinking with this maximum time thing, that you could quite easily generate all the possible combinations for that certain time in a file, whatever format. You could run it line by line rather than random from that point on.
If the condition is not completed with that frame input, mark it to say it doesn't reach the goal.
If the condition is completed then mark it as completed and at which frame. Search through the database and mark each one with the same combination up to that point as completed and the frame it completes that. If from here on a combination takes longer, automatically mark it as invalid (if you want the fastest time).
If a fail point (i.e. damage, fall into pit) occurs then mark it as bad, and also the frame at which the fail occurs. Then get it to search down the list and any combination with the same input up to the frame of the current can be marked bad (which could quite possibly cut out a ton of combinations).
With this idea, you can also stop the computer from doing this and continue from any points that haven't been tested.
It's just an idea. Personally, I see this as the fastest way to try every possible combination, correct me if i'm wrong. Of course if ideas of something like constantly moving or something this could still be applicable. The only problem I forsee with this method is the file size of the combinations if you're doing a whole game or something.
Just to say, I personally like the idea of Bisqbot, whether it's used for manipulating luck in a small sequence or a whole game. Well, I think a whole game is a bit excessive as there would be absolutely no point in us humans doing a run in the first place if you can get a computer to do it all.
...BisqBot is random?! Somehow I just see that as extremely inefficient.
I don't see why you couldn't start with a blank movie file and then increment the input every time you don't accomplish the goal, get hurt, die, etc - that way, the first solution BisqBot reports is the optimal one.
You can also insert ways of weeding out inefficient inputs, such as "don't press certain buttons if you performed certain action for X frames", "ignore this input if no input is recorded for X frames", starting with a movie length of X frames, or something of the sort.. though, who knows, BisqBot might come up with some trick you may never have imagined was possible?
This is called the expoential model. It has the slight problem that we're expecting the heat death of the universe befire that. Even with weeding.
So we need something else. Either train a program to play the game, feeling its way through the game and recognizing patterns that don't work, etc. Or we do it in small chunks where the feasibility of each one is much better. The former would take a very long time just to write and train properly. The latter requries a preplanned route.
You can't win, but just for the fun of it, let's do it anyways.
In the Patra rooms, you can only use the sword to kill it. So the room time is from when you enter, to when you leave. What the bot can do is find the means of killing the Patra. Then we can very easily calculate the time to walk to the door. Perhaps we would go with the 2nd fastest Patra kill if the walk to the door is shorter. There is no need to press start, select, or B.
Darknut rooms are a concern, because bomb conservation is important for later Darknut rooms. However, bomb drops are frequent. We should make sure to pick-up bombs even if they take longer because bombs are so necessary for destroying walls and killing bad guys later.
I'm unsure if your actions in one room affect another room's enemy layout. I'm sure that brute forcing rooms individually would still give a faster time per room than a human, but we would not be able to claim that it is perfect. When discussing perfection, we should only consider brute forcing game events which are completely isolated from other game events. If we're talking about just improving what we have now, and arriving slightly closer to perfection, then brute forcing is very reasonable for Zelda 1. There aren't that many fighting rooms to consider, and if we do them all individually, there is no doubt a (noticeable) amount of time will be saved.
I also really like Michael's point system idea, but I think that for Zelda 1 we couldn't program something to do what a human does. Many items drops are situational things. Depending on how soon you need an extra rupee, you may walk an extra distance that you wouldn't even consider when you don't need any rupees. Simply, we would have to program every instance of what should be done for a program to possibly get a faster time than a human.
We should also do candle boosts when we know we have little/no reliance on the sword's beam. If we can figure out fairy manipulation, life and the sword beam can become less of a concern. We need to do some tests on how much time the candle boosts can save us.
What's wrong with the point system? You'd already have the route planned out, so you can give it a different set of point values for each room. You can tell it where the door is that it has to reach in each room, and for each pixel closer to the door you get, the value increases by some amount. The value would also increase each time you damage an enemy you need to kill, so if you try using a weapon that doesn't hurt Patra, it would notice that the value isn't increasing by as much as it could be increasing if you used the sword. For the rupees, you could program it so that until you get to a certain point in the game (for example the point when the triforce address reaches a certain number), rupees are worth a certain amount, then after that they're worth nothing.
Enemy positions/directions/movements are randomized upon entering the room in this game, right? In that case it would be much better to start the bot right before entering the room it's supposed to optimize (and let it choose how soon to enter). The disadvantage is that more frames will be emulated for the room transition, so each attempt will be somewhat slower, but the advantage is that it will be able to manipulate the luck more, instead of being stuck with poor results from having bad luck before it started.
I would think that doing an entire room successfully is beyond the scope of Bisqbot as of current.
You could say that for any possible kind of technological advancement, but as I already mentioned we can try to make Bisqbot better, so maybe he'll be able to do it sometime in the future.
Couldn't you give BisqBot the current route, and make it run a section at a time giving it a +/- a 1 or 2 button per frame window, and brute it? And then based on whatever results it gives, if it yields anything intriguing, work towards getting that faster by hand then doing it all over again until nothing happens, adding certain general restrictions on the way?
I'm sure that that isn't viable, since I clearly don't know what I'm talking about.
-Oz.
If practice makes perfect, but nobody's perfect, why practice?
Michael: What do you think of this?
d = distance to rupee drop
D = distance to shop
r = value of rupee drop
R = Rupees left needed
d / [D/(R-r)]
If less than 1, pick it up. If greater than 1, don't pick it up.
Problem is knowing D at any given point.
Picking up a rupee drop based on the point system would affect the randomness of a room. I think we must find the best medium between 1) the fastest room completion, and 2) the most rupees collected (if we pick up all rupee drops.) This could be done by plotting the line functions of each and seeing where they interect.
|\ /
| \ /
| \/ <--- point of intersection
| / \
--------------
I am too sleep deprived and too shitty at math to think of this stuff now or ever. Good luck working with my half baked thoughts.