Negotiation Assistant Technical Details

When a seller has something that a buyer is interested in, both parties must agree to a price. When supply exceeds demand and prices are low, stores typically take a simple approach to this: you either accept their price or there's no deal. This works fine when there are many sellers competing to sell the same item. But for rarer items, or even just more expensive ones (cars, houses, etc.), there's often an element of negotiation involved.

In a negotiation like this, you never want to truthfully provide your "best price", since the other person will then try to get you to agree to an even better one. Hyperbole, falsehoods, and nitpicking tend to be the way to go. In addition to the downsides of normalizing dishonesty, this can be very stressful for people who aren't used to adversarial negotiation. Just look at the Wikipedia page on negotiation strategies to get an idea of how complicated this can get when one is trying to play optimally.

In theory, the optimal solution is to choose the price that maximizes total utility across both players. But in the real world, we have no good way to determine a human's utility function.

People usually handle this via some form of sequential bargaining. This incentivizes dishonesty, emotional manipulation, artificial self-restrictions, and other undesirable behavior. It rewards people who have high charisma, have more knowledge of psychology and game theory, and/or are good at manipulating other people. It punishes those who are conflict-averse, empathetic, and/or have poor social skills.For example, when Facebook trained an AI to negotiate, it learned to feign interest in an item it didn't actually want, just to "concede" it later on in the negotiation in return for something else it did want.

Is there a better way? Yes! Some types of negotiations can be strategyproof; designed such that the optimal strategy is for each player to be truthful about their best price. For example in a Vickrey auction, there's no incentive to lie or bid less than your maximum; doing so would only put you at a disadvantage.

Unfortunately, in the bargaining game with one seller and one buyer, the only strategyproof solutions are ones like "pick a player at random and give them complete control over the price". This is an obviously terrible solution, since it has infinitely negative expected utility for both players. Whichever player is given dictatorial power will want to choose a price that's arbitrarily in their favor. Due to the diminishing marginal utility of money, this will cause the loser to lose more utility than the winner will gain.

So if there's no solution that will make a rational agent avoid lying, we instead want to come up with a solution that minimizes the chance that a real human will lie. Since real humans are not rational agents, this is a very different problem, and there may exist a good solution.I considered the strategy of "lie to the user and claim that there exists a strategyproof solution, which this webpage implements". This would probably work on most people, but it would hinder adoption among those more economically-minded, and also seems unethical.

This negotiation assistant attempts to satisfy several criteria:

The way we do this is by letting both people input their information independently, and having the server return a final price based on the input information. This allows both parties to safely enter their true best guess at a fair market value without the first-mover advantage that this usually entails, along with their true best price, without the last mover-advantage that that usually entailsWhoever gives their best price first, the other party can then claim that their best price is the same number in order to force a transaction at that number..

If the seller's lowest price is higher than the buyer's highest price, no deal can be made. If the seller's lowest price equals the buyer's highest price, then a deal is made at that number. If the seller's fair price equals the buyer's fair price, and that price is within the valid interval, a deal is made at that number. If none of those are true, the server creates a probability distribution that's bounded by the "high" and "low" prices, which will be sampled from in order to get the final price. The specific distribution tries to satisfy the following constraints:

There are obviously an infinite number of probability distributions that satisfy these constraints, so the exact choice was rather arbitrary. Let a and b be the fair prices (doesn't matter which is which), l be the seller's lowest price, and h be the buyer's highest price. The distribution is then given by this construction, and you can see the exact code here.

You can explore the exact probability density function for a set of given input prices here:

(For simplicity, inputs are limited to integers in the range 1 - 1,000,000,000.)

This system is not completely immune to gaming; as mentioned above, that's impossible. The buyer can theoretically gain an advantage by guessing what the seller's best price will be and making their own best price only slightly higher than that. But the amount of money they can gained by doing this is pretty small, and if they guess wrong the whole deal could fall through unnecessarily, guaranteeing that no sale will ever be made.This is why it's very important that both parties agree to not try to renegotiate later if the tool says "no deal", and will refuse if the other party tries it. The disincentive for lying via the tool relies on the threat of no deal being made. Most people won't be able to accurately determine the correct lie to tell, and the truth is much easier.

There are also some potential meta-exploits:

If you have concerns about this system or think you can improve on it, I'd love to hear about it. Various methods to contact me can be found on the homepage, or simply leave a comment below. I offer a competitive reward of $2.57 for any issues found in this system.

Back to assistant

With thanks to Ryan Sears for helping me with some of the economics concepts, and to Jonathan King for coming up with the exact probability density function.