From marbles-isi@mailman.isi.edu Sun Aug 4 01:12:56 2002 From: marbles-isi@mailman.isi.edu (Jinbo) Date: Sat, 3 Aug 2002 17:12:56 -0700 Subject: [Marbles-isi] FYI: Dutch auction Message-ID: <001001c23b4b$af071c60$f5193c04@squid> This is a multi-part message in MIME format. ------=_NextPart_000_0011_01C23B11.02A84460 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0012_01C23B11.02A84460" ------=_NextPart_001_0012_01C23B11.02A84460 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Dutch auctions are a special type of auction designed to handle the case where a seller has a number of identical items to sell. The seller should specify the minimum price (starting bid) and the exact number of items that are available at that price. Interested buyers bid at or above that minimum price for the number of items that they are interested in buying. At the end of the auction, the highest bidder(s) earn(s) the right to purchase those items at the minimum successful bid. 1. Sellers specify both the quantity of items they want to sell and the minimum price they are willing to accept 2. Interested buyers bid for the quantity they would like to buy and the price at which they want to buy them ( at or above the minimum price indicated by the seller) 3. All winning bidders pay the same price per item - which is the lowest successful bid Example Twenty-five identical boards are being sold at a minimum bid of $75.00 and thirty interested buyers bid for one board each, at $75.00. In this case, only the first twenty-five buyers will be the bidders who get their product successfully. Since the bid amounts are the same, the earlier bids will take the equipment. Now, let's say that one buyer bids $100 for one board. Since his bid is higher than all the others, he will certainly be one of the bidders to get the equipment. If bidders continue to bid higher than the starting price enough times, then the final bidding price will increase as well. In another instance, if less than twenty-five people bid in our example "board" auction, only that number of boards will be sold at the opening price of $75.00. For the selling price to increase past the opening price specified by the seller there must be a higher or equal level of demand than the supply indicated. In our example, the selling price would only increase if twenty-five or more boards were bid on, no matter what the amount of each bid. Demand must exceed supply for the price to go up In the case where an interested buyer bids for multiple quantities, the bidder who bid the lowest will not always get the equipment he/she bid on. If the buyer who made the lowest bid requested a certain quantity of boards, he/she may not even be entitled to one board. For instance, if 2 other higher bidders each bought twelve boards, there would only be 1 board left. In this case, the original bidder would only be entitled to one board, even though he originally may have put in a bid for four. The only way to avoid this situation is to ensure that you are not the lowest successful bidder. Also note that buyers can refuse partial quantities, i.e. if only a fraction of the items they bid for is available. A bid's value in the auction is determined by the total number of items bid on, multiplied by the bid price Recommended Use: A Dutch auction format is geared towards sellers that have multiple identical pieces of equipment for sale. The transaction price for all items at the end of the auction is equal to the lowest (most favorable for the buyer) successful bid. ------=_NextPart_001_0012_01C23B11.02A84460 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Dutch auctions are a special type of auction designed to handle the case where = a seller has a number of identical items to sell. The seller should specify the minimum price (starting = bid) and the exact number of items that are available at that price. Interested = buyers bid at or above that minimum price for the number of items that they are interested in buying. At the end of the auction, the highest bidder(s) = earn(s) the right to purchase those items at the minimum successful bid.

 

  1. Sellers specify both = the quantity of items they want to sell and the minimum price they are = willing to accept
  2. Interested buyers = bid for the quantity they would like to buy and the price at which they = want to buy them ( at or above the minimum price indicated by the = seller)
  3. All winning bidders = pay the same price per item - which is the lowest successful bid

  =

Example

 

Twenty-five identical boards are being sold at a minimum bid of $75.00 and thirty interested buyers bid for one board each, at $75.00. In this case, only = the first twenty-five buyers will be the bidders who get their product successfully. Since the bid amounts are the same, the earlier bids will take the = equipment.

Now, let's say that one buyer bids $100 for one board. Since his bid is = higher than all the others, he will certainly be one of the bidders to get the equipment.

If bidders continue to bid higher than the starting price enough times, = then the final bidding price will increase as well. In another instance, if = less than twenty-five people bid in our example "board" auction, = only that number of boards will be sold at the opening price of $75.00. For the = selling price to increase past the opening price specified by the seller there = must be a higher or equal level of demand than the supply indicated. In our = example, the selling price would only increase if twenty-five or more boards were = bid on, no matter what the amount of each bid.



Demand must exceed = supply for the price to go up =


In the case where an interested buyer bids for multiple quantities, the = bidder who bid the lowest will not always get the equipment he/she bid on. If = the buyer who made the lowest bid requested a certain quantity of boards, = he/she may not even be entitled to one board. For instance, if 2 other higher = bidders each bought twelve boards, there would only be 1 board left. In this = case, the original bidder would only be entitled to one board, even though he = originally may have put in a bid for four. The only way to avoid this situation is = to ensure that you are not the lowest successful bidder. Also note that = buyers can refuse partial quantities, i.e. if only a fraction of the items they bid = for is available.  =

 

A bid's value in the auction is determined by = the total number of items bid on, multiplied by the bid = price =

  =

Recommended Use: A Dutch auction format is geared towards sellers = that have multiple identical = pieces of equipment for sale. The transaction price for all items at the end of = the auction is equal to the lowest (most favorable for the buyer) successful = bid.

 

------=_NextPart_001_0012_01C23B11.02A84460-- ------=_NextPart_000_0011_01C23B11.02A84460 Content-Type: image/gif; name="image001.gif" Content-Transfer-Encoding: base64 Content-ID: R0lGODlhDAAMAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAAAB AAEAgAAAAAECAwICRAEAOw== ------=_NextPart_000_0011_01C23B11.02A84460-- From marbles-isi@mailman.isi.edu Fri Aug 30 20:02:04 2002 From: marbles-isi@mailman.isi.edu (Martin Frank) Date: Fri, 30 Aug 2002 12:02:04 -0700 Subject: [Marbles-isi] revised Joint API based on yesterday's meeting Message-ID: <000e01c25057$ba82db30$2f800980@FREEDOM> This is a multi-part message in MIME format. ------=_NextPart_000_000F_01C2501D.0E240330 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Also checked in under marbles2/problemdefinition2 Please check in all your changes before the weekend -- I may try to retrofit the existing Marbles 2 solvers for the new API. Cheers, yours, Martin ------=_NextPart_000_000F_01C2501D.0E240330 Content-Type: application/octet-stream; name="M2Pd2.mjPackage" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="M2Pd2.mjPackage" /* The new definition of a Marbles 2 problem as of 2002-08-29, following = the Min-Donghan-Jinbo-Alejandro-Martin meeting. Joint API desiderata: = supports SNAP, fully distributable, supports many agentizations including = market agents, supports UAV teams, does not prescribe any particular = approach to solve the problem. The value of tasks is still a simple integer, the = bonus computation for particular resources has been eliminated as it was = not used by any solver anyway, and generally the question of how the user = should communicate task values, timing preferences, and resource choices in = this API has been postponed (we may possibly have several different = valuation schemes in different APIs). */ compilationDirectives { import "edu.isi.dce.util.time"; import "edu.isi.dce.marblesrunner.api"; } interface Named {public String getName();} interface PrettyPrintable {public void prettyPrint(PrintWriter);} interface Transmittable {public void serialize(Writer);} object AnchorSegmentStartPoints implements Transmittable -xml /* Wrapper to make clear to implementors and users what time intervals = below mean: intervals that contain the anchor segment start point of a = given task (does not make sense without knowing the actual task). */ { !MtMergingIntervals; } object IntervalsContainingTask implements Transmittable -xml /* Wrapper to make clear to implementors and users what time intervals = below mean: intervals that fully contain all segments of a task (makes = sense without referring to particular tasks). */ { !MtMergingIntervals; } object Binding implements Transmittable, PrettyPrintable -xml /* Contains resource assignments to requirements. The binding is to = resource capabilities rather than actual resources so that a solver can = substitute a resource with one with the same or better capabilities without having = to re-evaluate the other resource bindings. */ { String requirementName; ResourceCapabilities assignedResourceCapabilities; } list {} object TaskRequirementPair implements Transmittable -xml { Task; String requirementName; } interface RequiredCapabilities extends Transmittable /* Implemented as offset/capability pairs that are time-relative to the = task anchor point. For example, the requirement for a pilot for a pit = mission could be -2 hours:SECLD, 0 hours:LAT224, +1 hour:AG207, +90 minutes: AA265. Thus implicitly defines an anchor point. */ { public Strings getPossibleResourceTypes() /* Any resource not of this type is guaranteed to never meet these = required capabilities. Can be used for pre-filtering without having to = call the couldConceivablyEverMeet() function for every resource in = existence. */; } interface ResourceCapabilities extends Transmittable /* Implemented as fixed time points of achievement, such as ((2002-08-29T16:00:00Z 223)(2002-08-01T00:00:00Z SECLD)). Could = additional represent expirations. */ { public String getResourceType(); } object TaskSet -xml { Strings taskNamesInChonologicalOrder; } list -xml /* Used by an oracle function that determines which tasks could be cancelled to fit in a new task. */ {} interface DomainOracle /* (Will possibly split up into Oracle1, Oracle2, and so on for every = function in it so that not all agents have to have the entire domain JAR.) = This abstraction will answer questions about resource qualification and so = on that cannot be captured declaratively because of their complexitity = (pilot qualification based on time and the other pilot assignments, pilot availability based on crew day rules, aircraft usage time based on = minimum turnaround computation, sortie cycle slot selection, and so on). The = domain oracle itself cannot be serialized (or put the other way, the JAR = containing the Java code it executes _is_ the serialization of the domain = oracle). Different distributed schemes can either pass the domain oracle to = both task and resource agents at start-up (and possibly additional agents such = as market agents), or to just some of them -- this API tries to not = prescribe any particular agentization of the problem. */ { public RequiredCapabilities computeRequiredCapabilities( TaskRequirementPair,Bindings otherResources) /* throws an exception if the requirements that must be bound before = making a choice for this requirement are not in fact in the passe = bindings */; public ResourceCapabilities computeResourceCapabilities( ResourceSchedule,IntervalsContainingTask within) /* "Within" allows the computation to strip out capabilities earned = after the end point, as well as capabilities that expired before the = start point. */; public AnchorSegmentStartPoints meets( ResourceCapabilities,RequiredCapabilities, AnchorSegmentStartPoints within) /* When the resource can fill these required capabilities. The = "within" argument limits the computation to the passed anchor segment = starting points. Returned intervals can obviously be empty. */; public boolean couldConceivablyEverMeet( ResourceCapabilities, RequiredCapabilities) /* Could this resource meet this requirement, assuming it would get all the training imaginable? */; public AnchorSegmentStartPoints = timesOfAvailabilityWithoutCancellingAnything( ResourceSchedule,TaskRequirementPair, RequiredCapabilities,AnchorSegmentStartPoints within) /* TaskRequirement is needed because RequiredCapabilities does e.g. = not indicate how long a task lasts. RequiredCapabilities is still = needed separately because the could exceed minimum requirements and have = an influence on when the resource would be available (e.g. can only = serve as a division lead for one mission per crew day). */; =20 public TaskSets = setsToCancelToCreateAvailabilityForTheEntireWithinPeriod( ResourceSchedule,TaskRequirementPair, RequiredCapabilities,AnchorSegmentStartPoints within) /* What are the possible tasks that if cancelled would enable the = given resource to take on the requirement of the task, for any anchor = segment start point of the intervals passed? Very inefficient if called = for wide "within" intervals, so don't. */; =20 // All of the parameters that go into the above functions can be sent = of the // wire between agents. public AnchorSegmentStartPoints = deserializeAnchorSegmentStartPoints(Reader); public Bindings deserializeBindings(Reader); public Resources deserializeResources(Reader); public Tasks deserializeTasks(Reader); } object FilledTaskAsSeenByResource -xml { TaskRequirementPair; long anchorSegmentStartPoint; RequiredCapabilities /* The required capabilities this resource committed to. Listed here because they could exceed the computable minimum required = capabilities for that requirement. A resource is responsible for notifying the = task if it can no longer meet the required capabilities (because e.g. = an enabling earlier task was cancelled). */; } list FilledTasksAsSeenByResource -xml {} object ResourceSchedule -xml { String resourceName; FilledTasksAsSeenByResource; } =20 interface Resource extends Named, PrettyPrintable /* Abstraction passed to the resource agent. Resources have globally = unique names. An implementation must be able to transmit all of the = information that goes into domain oracle computation somewhere else; in SNAP's = case, that would be e.g. a pilot's qualifications and his scheduled = activities, and e.g. an airplane's type and the bindings of already-scheduled = activities to sortie cycle slots (as the latter may influence when an aircraft = is available again). */ { public String getType() /* always just one type for now, such as "Pilot" (even though that = resource may have secondary "types", such as ODO; we may need to expand on = that later; for now, just take the superclass if necessary in those = cases, such as "Human" or "Marine") */; public !MtTouchingIntervals getAvailability() /* A resource in the solver initializes its schedule with this availability. To be interpreted as "resource will definitely not = be available outside these time intervals, ever" (but the resource = may not necessarily be available for all types of activities inside the = time intervals, even if there seems to be availability, because of = crew day restrictions for example). */; } list {} interface Segment extends Named, PrettyPrintable /* Segments have names that are unique within their task. */ { public Duration getTypicalDuration() /* For now, the length of task segments is rigid (typical equals = minimum equals maximum). In the future, we may have a minimum duration, a maximum duration, and a preference curve for the user's choice of = the best duration. */; } list {} interface Requirement extends Named, PrettyPrintable /* Requirements have names that are unique within their task. */ { public String getType() /* Such as "Pilot" or "Range" - used for GUI displays rather than = reasoning at this point. */; public Segments getRequiredForSegments(Segments/*all of task*/) /* Given the list of all segments of this task that is passed in, = point out those for which the resource is needed. */; public Strings = namesOfRequirementsThatMustBeBoundBeforeFillingThisOne(); } list {} // interface DependencyGroup // /* A dependency group are a set of requirements within a single task = which // cannot be assigned in isolation. In SNAP, that would be the group = of pilot // requirements for example. */ // { // public Requirements getRequirements() // /* all of the requirements that make up this dependency group = */; // } // list {} interface Task extends Named, PrettyPrintable, Transmittable { public int getValue() /* Task value, can be negative. A task with = negative value should not be put on the schedule by = the solver. */; public Segments getSegments(); public Segment getAnchorSegment() /*time intervals below refer to the beginning point of the = referenced anchor segment*/; public !MtMergingIntervals getValidBeginningsOfAnchorSegment() /* Anything outside these intervals is illegal. */; public Requirements getRequirements(); } list {} interface ProblemDefinition extends !MaApiProblemDefinition, = PrettyPrintable /* Centralized solvers are passed this abstraction. In the current = distributed agents API (distributed/infrastructure/distsolverapi) this domain = oracle is passed to both tasks and resources, and there is one agent for every = task and for every resource, but this is just one possibility. */ { public DomainOracle getDomainOracle(); public Resources getResources() /*list is static while solver runs for now*/; public Tasks getTasks() /*list is static while solver runs for now*/; } //list {} ------=_NextPart_000_000F_01C2501D.0E240330--