Bug - Not A Bug Maximizer not working properly with "clownosity" and "raveosity"

Running the modifier maximizer to get your clownosity or raveosity up to the necessary levels has a tendency to do nothing, or otherwise miss items. I just tried "maximize clownosity" on a (high-level) character that has bloodly clown pants and a fool's cap in inventory (and no clown items equipped) and got this:

Code:
> maximize clownosity

Maximizing (1st time may take a while)...
416 combinations checked, best score 0.0
Putting on foolscap fool's cap...
Equipment changed.
Wielding Uncle Hobo's highest bough...
Equipment changed.
Holding Zombo's shield...
Equipment changed.
Putting on fossilized necklace...
Equipment changed.
Putting on Talisman of Baio...
Equipment changed.
Maximizing...
48 combinations checked, best score 0.0

> inv clown

bloody clown pants

> maximize clownosity

Maximizing...
48 combinations checked, best score 0.0
So it's reporting 0.0, even though it equipped a 1 clownosity the first time and character pane reports I'm at 1/4, and missing another clown item entirely.

I don't have a character that can test raveosity right now, but I've noticed the same kind of issue before when I was doing DB nemesis, and some clanmates are saying they also have issues (and that it tends to mess up nemesis.ash in particular).
 

slyz

Developer
Those modifiers are "bitmap" modifiers: either you satisfy them (4/4 clownosity and 7/7 raveosity), or you don't satisfy them at all.

EDIT: see the "Other Modifiers" part of the Maximizer help for more info.
 
Ah, interesting. But if that character failed to meat the clownosity of 4, why did it equip the fool's cap? That doesn't sound like a true/false kind of behavior.
 

Theraze

Active member
Because you didn't ask for 4 clownosity, you asked for 1. If you wanted to maximize 4 clownosity, you should have said so.
 

Alhifar

Member
It still seems not to work quite properly, I tried maximizing "4 clownosity" on a character with bloody clown pants, a clown wig, and a big red clown nose in inventory, and while it recommends those items, it still comes up as failed in the cli, which seems quite strange to me.
 

roippi

Developer
CLI maximize 4 clownosity -tie (or 7 raveosity) works for me, but there's some irregularities with the graphical maximizer. The appropriate -osity values do not show up next to the recommended equipment in parentheses (instead it's +0 for everything). This causes some situational displays of (FAILED) in current and predicted.

I only ever use the gCLI command, but the above is worth noting.
 
Using the window for the modifier maximizer, even when 4 clownosity or 7 raveosity can be achieved, it still always says that you have failed and gives you a score of 0.0. Intended behavior or not, it is most unhelpful as a score.

Also, what benefit is even given with not giving the clownosity/raveosity score? Having each piece show its clownosity/raveosity score would allow the user to select the equipment in the modifier maximizer window to use.
 

roippi

Developer
Because, as slyz explains, it is a bitmap modifier. That means some stuff is different.

You need to understand what the display is saying. There is a "current" score and a "predicted" score. Highlight all of the recommended equipment and notice how (FAILED) disappears if you meet the desired -osity.
 
But what advantage is there to not marking which pieces give what clownosity/raveosity? Or of not showing the best clownosity/raveosity that you can achieve? Also, what advantage is there to including pieces in the suggested outfit that do not contribute to clownosity/raveosity? The only thing that it does, in my view, is confuse the user.
 

roippi

Developer
But what advantage is there to not marking which pieces give what clownosity/raveosity?

None, other than it is technically difficult to make it work that way. Feel free to submit a patch that makes it do that.

Or of not showing the best clownosity/raveosity that you can achieve?

You asked for a certain clownosity, it gives you that clownosity.

Also, what advantage is there to including pieces in the suggested outfit that do not contribute to clownosity/raveosity? The only thing that it does, in my view, is confuse the user.

That is how the maximizer tiebreaker works, for everything. If you don't want that, use -tie.
 

Theraze

Active member
If you don't manually define -tie, it will suggest other pieces based on the standard "tie" options. If you don't want it to suggest non-useful pieces to your maximization string, tell it not to do that. It's how the system works.

And as roippi and slyz have said, either you have enough on those or you don't... having 3/4 clownosity is nice, but... useless. Bitmap modifiers. They're different.

Edit: And... ninja-ed. :)
 
That is how the maximizer tiebreaker works, for everything. If you don't want that, use -tie.

No? If I go into the modifier maximizer and ask it to maximize, say, pvp fights, it has acc3 set to "keep acc3" because I do not have three accessories that increase pvp fights.

Also, why is it technically difficult to make it work that way? It is essentially a combination problem, and I fail to see why the same framework cannot be applied to this problem. You guys keep throwing around that it is a bitmap, but I do not see how. Maximizing item, for instance, just finds the outfit with the best +item, and +item is just an attribute of each piece of equipment. What about the clownosity problem makes it different? Each piece of equipment has a clownosity attribute (0, 1, 2), and so you want to find an outfit that maximizes clownosity. After you have that, if you are wanting to get an outfit with 4 clownosity, all you have to do is check the (absurdly small) set of combinations of those pieces in the result and minimize the clownosity, while keeping it at minimum 4.

Python-style pseudocode:
Code:
def get_suboutfit(items, minimum):
    bestval = 99999
    best = None
    def recurse(items_selected, item_choices, current):
        if current >= minimum and current < bestval:
            bestval = current
            best = items_selected
        else:
            for i in range(len(item_choices)):
                recurse(items_selected + [item_choices[i]], item_choices[i:], current + clownosity_value(item_choices[i]))
    recurse([], items, 0)
    return best, bestval
I don't see anything technically difficult about that, myself.

I would go into the code, try to find where the modifier maximizer is myself, and make the change, but I am unfamiliar with the codebase and lack the time to familiarize myself with said codebase and make the change, at least at this point in time. So I am trying to understand why you guys seem to think that it is hard.


And as roippi and slyz have said, either you have enough on those or you don't... having 3/4 clownosity is nice, but... useless. Bitmap modifiers. They're different.

Yes, but as it stands the modifier maximizer gives you next to no useful information. The *only* thing that you can figure out is whether the entire outfit it gave you contains pieces that give you the required amount, not what they are, or how close you are if you do not have enough. If you do not have enough, knowing how close you are could be useful. One might want to pull for that final 2/4, or make a balloon sword for the rest, or something else. Being a binary output (that you aren't even given unless you select the entire outfit in the modifier maximizer) strips away potentially useful information.
 
Last edited:

roippi

Developer

Yes. This is not a discussion, that is how it works. If you are not getting a tiebreaker, you're either using a modified build or are, more likely, using the "fites" keyword which includes -tie. "adv" also works like that.

I would go into the code, try to find where the modifier maximizer is myself, and make the change, but I am unfamiliar with the codebase and lack the time to familiarize myself with said codebase and make the change, at least at this point in time. So I am trying to understand why you guys seem to think that it is hard.

If you are unfamiliar with the codebase how about you quit asking for justification from people who are familiar with the codebase.

I'll even point you to the maximizer code. Have a look.
 
Yes. This is not a discussion, that is how it works. If you are not getting a tiebreaker, you're either using a modified build or are, more likely, using the "fites" keyword which includes -tie. "adv" also works like that.

I am not using a modified build. I am using the base modifier maximizer found in the tools menu, with no settings modified. It does not add useless items to the outfit for anything except when maximizing raveosity or clownosity. Check it yourself. It may well be that said interface automatically adds -tie for most options, except for raveosity/clownosity, but that is exactly how it works for that window.

Edit: Oh, wait...do you mean the "fights" keyword? Because the interface does say "PVP fights", so that would explain it. But I have no 'fites' keyword.

If you are unfamiliar with the codebase how about you quit asking for justification from people who are familiar with the codebase.

I am asking for an explanation from the people who are familiar with the codebase. It's called asking the experts. If something about my proposed methodology above is way off, you could tell me instead of being so snarky.
 
Last edited:

roippi

Developer
I am not using a modified build. I am using the base modifier maximizer found in the tools menu, with no settings modified. It does not add useless items to the outfit for anything except when maximizing raveosity or clownosity. Check it yourself. It may well be that said interface automatically adds -tie for most options, except for raveosity/clownosity, but that is exactly how it works for that window.

I suggest that you check it yourself. -tie is only implicitly added in "adv" and "fites" keywords, as I said above.

Code:
[COLOR=olive]> maximize pvp fights -tie[/COLOR]

Maximizing...
744      combinations checked, best score 2.00
Putting on Corporal Fennel's      Lonely Clubs Club Jacket...
Equipment changed.

[COLOR=olive]>      maximize pvp fights[/COLOR]

Maximizing...
312 combinations      checked, best score 2.00
Putting on nurse's hat...
Equipment changed.
Holding      stress ball...
Equipment changed.
Putting on hopping socks...
Equipment      changed.
Putting on Hodgman's bow tie...
Equipment changed.

I am asking for an explanation from the people who are familiar with the codebase. It's called asking the experts. If something about my proposed methodology above is way off, you could tell me instead of being so snarky.

The thing that is way off is that clownosity is a bitmap modifier. That is your answer. If you don't believe me, look at the code; if you don't know what that means, google it.
 
I suggest that you check it yourself. -tie is only implicitly added in "adv" and "fites" keywords, as I said above.

Your output is from the gCLI. I did not use the gCLI. I used the window that you get from Tools->Modifier Maximizer. Telling to maximize just "pvp fights", in there, does *not* add the extra stuff to the outfit like it does in your output, despite not adding -tie at the end like you needed to. The gCLI may well work differently, but I tried to be very specific above in mentioning that I am using the window, not the gCLI, just in case that is the case.

The thing that is way off is that clownosity is a bitmap modifier. That is your answer. If you don't believe me, look at the code; if you don't know what that means, google it.

I have looked it up in google, and I come up with exactly 2 kinds of results: graphics results, which obviously do not apply (last I checked mapping textures to meshes or adding bloom effects is not part of what KoLMafia does), and results related to KoLMafia. One of which being this: http://kolmafia.us/showthread.php?2781-bitmap-modifiers, suggesting that it can be converted into a number. That being the case, the pseudocode I gave above seems to be feasible. If it can be converted into a number, the same algorithm should work.

I do not mind if nobody wants to actually try what I suggested, I am just confused because your explanation of bitmap modifier isn't explaining what the infeasible part of the process is, since I found (trivially) a case of somebody converting it into numbers.



Edit: So I have to apologize about the -tie/PVP fights thing. I decided to try it again, and it turns out that I just so happened to already be wearing what it was suggesting that was useless at the time...so you do seem to be right, I just had hit the absurdly low chance of wearing what it would already suggest. Again, sorry.
 
Last edited:

roippi

Developer
Sigh.

Your output is from the gCLI. I did not use the gCLI. I used the window that you get from Tools->Modifier Maximizer. Telling to maximize just "pvp fights", in there, does *not* add the extra stuff to the outfit like it does in your output. The gCLI may well work differently, but I tried to be very specific above in mentioning that I am using the window, not the gCLI, just in case that is the case.

The gCLI works exactly the same.

If it isn't recommending tiebreaker things, that is because you already have the same equipment in those slots that the tiebreaker would recommend. Try closeting things and experimenting with -tie, and try other maximization strings. This is really not worth discussing any further, because you seem to have a real difficult time believing the "expert" opinions that you are asking for.
 
I had such a hard time believing what you said because it did not mesh with the output that I was getting. People do tend to believe what they see first-hand before all else (I mean, that's why illusions works, precisely because people *don't* see something critical, or because they think that they see something else.) So, not even thinking about the fact that I might already be wearing what it would suggest, I saw output disagreeing with what you said, and put forth my experience. Again, I apologize, I did not dream that that could happen. (Also, you have a bad habit of posting *right* as I edit my last post because I thought of/realized something new, I realized this very possibility *just* before you replied.)



Aside from that, am I right that the bitmap modifier can be converted into a number? Because if there is some problem that bitmap modifiers would cause otherwise, you are being so hopelessly vague that I would just be wasting my time trying to read the 3k of modifier maximizer code if I ever decided to try to modify how it maximizes. (Which, again, I do not have the time to work on now, but if you confirm that it is possible I could conceivably get industrious sometime when I do actually have time to look at the code.)
 
Top