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.
Sellers specify both =
the
quantity of items they want to sell and the minimum price they are =
willing
to accept
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)
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--