Not signed in (Sign In)
  1.  
    Since Auctioneer Advanced's SearchUI is now functional, we've come to realize that in order to get all the functionality we want into the SearchUI module we would need to duplicate the existing evaluators that BottomScanner uses, and not only duplicate, but modify them to work with how the SearchUI feeds its searcher modules data. This is simply unacceptable since it will mean that we would have to maintain two files that do the exact same thing, but are written for incompatible APIs. So how do we solve this issue you ask? Well, we considered a few options, including writing a wrapper for the BTM evaluators so that the SearchUI could use them, but each of those options we considered sub-standard and hackish. So we opted to create a new AddOn, tentatively called "Evaluator", that would house the evaluators (and filters) that would be used by both Auctioneer's SearchUI and by BottomScanner.

    You might have noticed that I said the evaluator/searcher APIs for both BottomScanner and the SearchUI are currently incompatible, and you might have asked yourself that if these two systems are incompatible how can we write an evaluator system that would serve both systems? The answer to that one is rather simple. Even though the systems are currently incompatible, the underlying mechanics are the same. In fact, I've explained the SearchUI as BottomScanner on the snapshot, that is, BottomScanner that acts not on "live" data, but on data that was stored by Auctioneer Advanced scanning subsystem. So basically, both APIs have the same requirements, just different ways of asking for those requirements. Having said that, I will also mention that both systems will have to be re-factored to accept the new unified evaluators system that we're proposing.

    By this point you might be asking exactly how will the new system work? Well, the new system is rather simple, as previously stated there will be a new AddOn tentatively called "Evaluator" that will be a required dependency of both the SearchUI and BottomScanner. This new AddOn will provide a way for other evaluators and filters to add themselves to the list of avalilable evaluators and filters. Evaluators would do the job of assigning an item a worth, based on internal calculations. Filters would, as the name implies, filter out unwanted auctions based on internal characteristics. The Evaluator AddOn would also provide a set of utility functions for Evaluators to use.

    Evaluators would have to provide a single function tentatively called EvaluateItem() who's prototype would be as follows: function EvaluateItem(itemLink [,stackSize [, infoTable [, minBid, curBud, buyout]]]) return buyOrNot, value, delta [,stddev [,reason]] end. Explanations of the individual parameters follow:
    itemLink = The full item's link
    stackSize = An optional stack size being evaluated, if nil it means that the evaluator should not do any computations involving stacksize and just return price evaluation
    infoTable = An optional table that will get filled with extra info (like that currently displayed by BTM's evaluators in the Tooltip). Exact format TBD.
    minBid, curBud, buyout = These optional parameters are the same ones returned by the GetAuctionItemInfo() function.
    Explanations of the individual returns follow:
    bidBuyOrNot = "bid", "buy" or false, self explanatory :)
    value = Price valuation
    delta = Delta is the difference from the value taking into account re-listings, ah fees and the like.
    stddev = A confidence value from 0-1, usually stddev, but can be gathered from wherever, basically stating how certain an evaluator is of the given value+delta's accuracy.
    reason = A string outlining the reason why an item should be bought or not. Please only fill this out if its an important consideration, since it might be placed in the Tooltip. Even if you do not return this, the caller will still know your module's name. So don't return "buy it for resale!" (if you're a resale eval) or "valuation > price" or anything obvious.

    Filters would have to provide a single function tentatively called FilterItem() who's prototype would be as follows: function FilterItem(GetAuctionItemLink(), GetAuctionItemInfo()) return filterBid, filterBuyout, reason end. The parameters for this function would match those returned from GetAuctionItemLink() & GetAuctionItemInfo() for the specific auction being questioned for filtering. The returns are true if the auction is to be filtered or false if its should not be filtered, the reason is as above.

    Additionally, the Evaluator AddOn would provide mechanisms for calling each module individually in addition to functions to call all the modules in turn for a specific item/auction.

    This forum post was created in a public forum so that you the users (and possibly creators) of these evaluator and filter modules could comment on, and ask questions about the proposed implementation.

    --
    MentalPower
    Lead Developer of the Auctioneer AddOns Project
    • CommentAuthorNine
    • CommentTimeApr 10th 2008 edited
     
    Stats modules tell you the amount the item is selling for, while evaluators tell you the amount you should buy it for. The difference is in the margin. Why not just expand the stats modules to optionally have both a sell price and a buy price? Then evaluators are just stats modules that only have a buy price, or vice versa: stats modules are just evaluators that only have a sell price. Some could have both, I imagine.

    Re the return API

    bidOrBuyOrNot/value: simplify these to a simple price. if it's >= buyout (and there is a buyout), buy it, elseif it's >= bid, bid that amount, else skip it
    delta: no, this is internal, it should feed into the price above
    stddev: no, never been happy with these. there's no standard scale defining what they mean. modules should consider their own confidence and apply that to their price
    reason: sure, for UI purposes

    i.e. boil it down to price, reason :)

    BTW, more sophisticated modules like Appraiser can be looked at in a similar way. Underneath all the complexity of the posting interface, it's a configurable stats module that collects data from elsewhere and gives a sell price. The current Appraiser evaluator in BtmScan gives the corresponding buy price.
    • CommentAuthorRockSlice
    • CommentTimeApr 10th 2008
     
    My I recommend that in the future, discussions like this take place before someone takes on a major coding task that everyone has been saying for months has been needed, but nobody's tackled?
    •  
      CommentAuthordinesh
    • CommentTimeApr 10th 2008
     
    Heh, sorry about that rockSlice.

    I thought I had given my private thoughts to you before, but it appears I only did so with norgs. and I have commented in the forums on multiple occasions about my ideas about how BTM and search should share evaluators. I should have linked at least one of them to the JIRA issue, I suppose. My bad, completely.
    •  
      CommentAuthordinesh
    • CommentTimeApr 10th 2008
     
    Given Nine's gentle sidetracking above, I'm providing a link to my thoughts on pricing: http://forums.norganna.org/discussion/5084/treatise-on-pricing/

    Some parts are perhaps a little dated, but I still agree with most everything I said there. Note that there is also a section on evaluators (the buy price section), though it is significantly less detailed than MP's proposal above.
    •  
      CommentAuthorNechckn
    • CommentTimeApr 10th 2008 edited
     
    RockSlice-

    Believe it was your effort that got folks thinking about the mechanics again- which is at least a small consolation.

    BTW- Some of us dig the current incarnation, especially the Appraiser part. =)

    As for the changing methodology and functions-

    As long as there is the ability to perform "simple" searches as in the previous incarnations, a huge heap of users will be happy. As long as there is a method to pick the stat-Appraiser or stat-simple and run a search that does not take more than 30 seconds or so, would think that most will be satisfied.

    The customized Evaluators are the icing on the cake for those who want to squeeze every penny out of the marketplace or purchase a very specific set of goods. After all, the #1 complaint about AAdv is that it is too complex for the average joe.

    Nikk :shades:
    • CommentAuthorNine
    • CommentTimeApr 10th 2008
     
    Posted By: dineshGiven Nine's gentle sidetracking above, I'm providing a link to my thoughts on pricing:http://forums.norganna.org/discussion/5084/treatise-on-pricing/


    Indeed, did sidetrack there a bit, sorry. I condensed my rambling into one reply. It just seems kinda odd to me to have two or more APIs that do basically the same thing: take an item and perhaps some other details and return a monetary value.
    • CommentAuthorKinesia
    • CommentTimeApr 10th 2008
     
    I think Evaluators and Stats modules should be kept separate. I can see the point that they are the same (technically filters are as well just even more stripped down) but I feel that in most places you want something to perform the role of just a stat module or an evaluator and having a complete api that enables both functions could become incredibly daunting and potentially complicate just thinking about it...

    One of the more complicated scenarios I can come up with for an Evaluator is for crafting... It's not really viable to do with the current BTM but becomes almost perfect in the SearchUI. It would also become extremely complicated to work out what it meant in terms of a Stat.
    Search for all items I can make profitably...
    A list appears of only those trade goods where all the items exist that you can craft and where all the trade goods are available in the current snapshot for buyout.
    The reason for buying is given as the item name and the value of any specific trade good is the fraction of the total price of the item compared to the total price of the mats.
    You sort by reason, look at all the stuff you could buy to make an item in one spot, Ctrl-click to select multiple items and then buy them all.

    Potentially, yes, the value of Netherweave is always a percentage of the cost of bandages or netherweave bracers, but in reality for most craft items it is totally dependant on what you have access to in terms of materials immediately and doesn't make sense as a stat when divorced from the contents of the current snapshot and your bags and bank.

    I feel that stats should roughly maintain their value over the rest of your session once you've left the AH and gone out in the world and need to decide what to do with what you find. Evaluators cannot do that, they are potentially extremely volatile.
    • CommentAuthorMikk
    • CommentTimeApr 11th 2008 edited
     
    Also consider e.g. the "snatch" evaluator which SHOULD be configurable to only buy a specific amount of things (except that last bit was never fully implemented). This necessitates the evaluator knowing about counts of items.

    We did start out by thinking "evaluators should be simple", i.e. only accepting an itemlink and returning a value. And that is indeed enough for the really simple evaluators.

    But then we started playing "what-if" scenarios:

    • Counts got added because of snatch.

    • Bid/buy got added because evaluators can currently be configured to bid or buy separately. This COULD be configured in the using app, but keep in mind that we'll have several apps using the evaluators, and duplicating these settings (on a per-evaluator basis) in all apps is just unnecessary work for the user.

    • We split the value into two: 1. the projected sell price and 2. the max to buy for:
      - The projected sell price is interesting to the user
      - The max buy ("valuation") depends on several things internal to the evaluator, e.g. what is the relisting cost? What markdown% should we use? These are all configurable on a per-evaluator basis today.

    • Stddevs got added mostly because we know that some evaluators can predict very accurately what the chance is of making X amount of cash off an item (DE mats is a shining example). This could be presented to the user, or filtered on by the using app.



    As you may have noticed, many parameters and returns are optional, meaning that in its simplest mode you could indeed feed pretty much only an itemlink to the evaluator and have it spit out a projected price + valuation. I do not know which addon would use this, but the option is available.


    I was going to add a "my $.02" here but I realize I've typed way too much - it'd just look out of place :-P
    • CommentAuthorMikk
    • CommentTimeApr 11th 2008
     
    On another note, I just realized that our filtering API doesn't quite cover today's filtering options.

    Today, filters can selectively filter allow only certain evaluators to run. Our spec cannot do that.

    It is quite possible that we should have two kinds of filters - one that you can run on raw query info, and one that you can run on outputs from evaluators (one by one). This would enable things like temporarily ignoring a certain item if its earnings% is too low (which is something I'd really like to implement for own use).
    •  
      CommentAuthordinesh
    • CommentTimeApr 11th 2008
     
    Posted By: MikkAlso consider e.g. the "snatch" evaluator which SHOULD be configurable to only buy a specific amount of things (except that last bit was never fully implemented).

    Just for some historical perspective, snatch counts were fully implemented (back in Auc4? or was it BottomFeeder?). Somehow or another that functionality did not get ported over to the new framework.

    Stddevs got added mostly because we know that some evaluators can predict very accurately what the chance is of making X amount of cash off an item (DE mats is a shining example). This could be presented to the user, or filtered on by the using app.

    As an aside, I would much prefer we call this confidence (or some such) rather than StdDev, since for many (or possibly even most) evaluators, the value we return here will not be an actual statistical standard deviation.
    • CommentAuthorRockSlice
    • CommentTimeApr 11th 2008
     
    Thinking long term, I believe it is the plan to eventually let AucClassic die.

    When that happens, here are some problems with this plan that don't make sense to me:

    • You'll have 3 addons to find bargains (SearchUI, BtmScan, Evaluators)
      [*]Only two of those will be AucAdv Modules
      [*]Only one of those will be embeddable
      [*]One of them (BtmScan) will have a lot of code designed to work with Classic (both in the scanning engine and the evaluators - which would get into Auc-Util-Evaluators)

  2. I think it would make much more sense to have simply one Module to deal with finding bargains. This means either porting the searchUI into btmscan, or the btmscanning functionality into SearchUI. Meaning no disrespect to all the work that's gone into BtmScan over the years, but due to item 4 above, I think it should be the latter.


    Also, regarding format to send to the evaluators, for the SearchUI, we are dealing with AucAdvanced.Scan.GetScanData(), which returns a table. For Btmscanning, we deal with GetAuctionItemInfo), which returns multiple arguments, which currently gets put into a table.

    Seeing as for one of the purposes, we are already dealing with a well laid out table, why not use that as the format? By not passing the evaluators all the data we currently have on the auction, we're ensuring that some evaluators will call GetItemInfo() on the link to get data that we could have given them in the first place, slowing down the search.

    As a side note regarding speed compared to AucClassic's search tab, I could be wrong, but I don't think it's possible to have any search be that fast, simply because getting the market price in AucAdv is more involved. (one possible workaround is to have AucAdv cache the prices until the stats get updated, but that would definitely be a large cache at times)
    • CommentAuthormattbnr
    • CommentTimeApr 11th 2008
     
    Posted By: RockSlicelet AucClassic die


    i second this idea so more energy and focus can put put toward fixing/adding new features/bugs in advanced and not have to try to trouble shot 2 different systems. i realize many people will not like this as they are stuck in the "old" way of doing things but this is the 21st century and its time to get on with the new and hip out with the old. just my $.02.
    • CommentAuthorNine
    • CommentTimeApr 11th 2008 edited
     
    Posted By: Kinesia
    Potentially, yes, the value of Netherweave is always a percentage of the cost of bandages or netherweave bracers, but in reality for most craft items it is totally dependant on what you have access to in terms of materials immediately and doesn't make sense as a stat when divorced from the contents of the current snapshot and your bags and bank.


    I don't think there's a need for a distinction inside a crafting app between what is available on the AH and what you have. Items you already have are "bought" as well - bought from yourself. They cost the amount you lose by not using them for something else.
    • CommentAuthorKinesia
    • CommentTimeApr 11th 2008
     
    The thing is that in terms of mats you only know they are there at the instant you are scanning, even then you might not be able to buy them fast enough.
    So as soon as you step away from the auction house you can no longer rely on it's "inventory" being there at all.
    So it makes sense as an evaluator to buy things on the spot, but it doesn't make sense to include that data in a tooltip Stat because it's already obsolete.
    • CommentAuthorNine
    • CommentTimeApr 12th 2008 edited
     
    Posted By: MikkWe did start out by thinking "evaluators should be simple", i.e. only accepting an itemlink and returning a value. And that is indeed enough for the really simple evaluators.

    But then we started playing "what-if" scenarios:
    [ul]
  • Counts got added because of snatch.


  • Sure, on the input side. Evaluators should receive plenty of information on the item, including where it's coming from (the AH, your bags, an alt, etc.) as well as things like stack count. Important in particular for snatch and for crafting.

    Although actually, I would think things like snatch and crafting modules would be concerned with how many of the item you actually bought, and thus already have, as well as how many are available. They would need to get this information through other routes, or use the "buy from self" mechanism suggested elsethread.

  • Bid/buy got added because evaluators can currently be configured to bid or buy separately. This COULD be configured in the using app, but keep in mind that we'll have several apps using the evaluators, and duplicating these settings (on a per-evaluator basis) in all apps is just unnecessary work for the user.


  • If that's the issue, then shouldn't that setting be shared between the apps, rather than adding an extra return parameter to every evaluator?

  • We split the value into two: 1. the projected sell price and 2. the max to buy for:
    - The projected sell price is interesting to the user
    - The max buy ("valuation") depends on several things internal to the evaluator, e.g. what is the relisting cost? What markdown% should we use? These are all configurable on a per-evaluator basis today.


  • Ok, that makes sense. So the delta is optional (and assumed to be zero) with the final valuation as the primary return value?

  • Stddevs got added mostly because we know that some evaluators can predict very accurately what the chance is of making X amount of cash off an item (DE mats is a shining example). This could be presented to the user, or filtered on by the using app.
  • [/ul]


    Why not apply this to the delta? Then it has a definite monetary value, rather than being 75% of... something.
    • CommentAuthorNine
    • CommentTimeApr 12th 2008 edited
     
    Posted By: KinesiaThe thing is that in terms of mats you only know they are there at the instant you are scanning, even then you might not be able to buy them fast enough.
    So as soon as you step away from the auction house you can no longer rely on it's "inventory" being there at all.
    So it makes sense as an evaluator to buy things on the spot, but it doesn't make sense to include that data in a tooltip Stat because it's already obsolete.


    That's true, but it isn't concern for the crafting mod, it's a concern for the "how much does it cost to get this" mod. If you're away from the AH or your snapshot is old then it can consider those items not to exist (or less likely to exist), and their price therefore to be higher.

    It could be clever about it and try to predict what WILL BE available on past performance. I quite often buy stuff pre-emptively even though other mats are not immediately available, because I know there's going to be flood of them sooner or later. The Eternium Bars and Primal Earths I need to deal with all that Adamantite Powder from JCing are a good example - seems like they're never both available cheaply at the same time, but when there's a flood it's a big one.
  • World of Warcraft™ and Blizzard Entertainment™ are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.