Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Thursday 9 May 2019

A beautiful duopoly

One hundred and fifty years before John Nash received his Nobel prize, a train left Versailles for Paris. On board were two brothers returning home from visiting friends. Always a pleasant journey through the French countryside, this one was, unfortunately, in peril. The train crashed and one of the two brothers, Joseph, was severely injured with a broken bone and other fractures. Joseph Bertrand on that day was 20 years old and was already a professor of mathematics with a doctorate he received at the age of 17 for a thesis in thermodynamics.

Bertrand would later develop a thesis around an economic situation in which two companies dominate a market, formally known as the Bertrand duopoly. He proposed that in a state of duopoly, whereby players offer a non-differentiated product and are not in cooperation, their customers buy from whichever one sells it for cheaper.

Bertrand’s work was one of the foundations upon which Nash would later build. Where Bertrand defined a cutthroat competition, Nash recognized that competitors don’t always know what the other’s cost structure is or what they would do in response to one’s actions, therefore keep making tactical decisions in their businesses resulting in certain payoffs. He stated that there exists a profile of strategies such that each competitor’s strategy is an optimal response to the other’s, there is a point of balance in which neither competitor has anything to gain by changing strategies. That point is called the “Nash Equilibrium.”

John Nash shared the Nobel prize in 1994 with another brilliant mind: John Harsanyi. Harsanyi examined the uncertainty around each party’s knowledge and understanding of the other’s decisions and how beliefs can be embedded into a framework of game theory. These games are called games of incomplete information. Harsanyi said that the payoff structures are not always known and come with a certain probability distribution so one should take probability into account when making a tactical economic move and calculating the results.

From Bertrand to Nash to Harsanyi, many companies have struggled with competition, conditions of duopoly, price pressures and survival. Some survived, some did not. Others reached a profitable state of Nash equilibrium and still exist to this day.

Fast-forward to today… here comes Uber and Lyft.

Consider a hypothetical situation where Lyft runs a promo in a specific market. Doing so will impact Lyft’s market share, total revenue, and overall profits. It will also impact Uber’s market share and total revenue in that market, but not profit per ride because they have not yet responded to the move by adjusting their price. The same situation applies to Lyft if Uber runs a promo. They will choose to respond or not respond based on their beliefs of the payoff they will receive. They will keep playing this game until they conclude there’s nothing to gain by offering more promos at which point, they will have reached Nash equilibrium.

Harsanyi’s work is quite relevant here because the two companies have a reasonably good idea about the outcome of each action and each other’s costs but do not precisely know what they were, and they compete with a certain level of belief about each other’s preferences and payoffs. Based on their beliefs, each company will have to assign a certain level of probability to the outcomes of their actions and the responses of their competitor.

We must also note that in the very beginning, competitors know less about each other, but the longer they play the game, the more they will learn and make adjustments to their moves. Going public brings more transparency about each company so with that they will learn even more. The more each competitor will know about each other the more informed their decisions and responses will be so the rideshare game should ultimately reach Nash equilibrium.

So, which one will prevail? At this point, there are a number of questions one must ask as an investor. Are Uber and Lyft in Nash equilibrium today? If they are in Nash equilibrium, and we know that this state means they’re losing money every day, they will ultimately deplete all reserves. If not, what would that final state of equilibrium be? Would it be a profitable state for these companies and their investors? In a state of Nash equilibrium, what price would each company charge their customers in a given market?

Secondly, do Uber and Lyft exist in a Bertrand duopoly? Their products are identical. One driver can drive for both companies in the same car and they often do. Bertrand would be baffled at how fierce this competition is. In his mind, price wars would end when price equals cost leaving no profit for either party or no economic interest to continue their businesses. In this case, these companies convinced investors to raise massive levels of outside capital so that they can afford to charge prices below their cost, operating at deficits hoping they would beat the competition and at some point, reach profitability.

There are two things companies can do to escape Bertrand duopoly: either come up with a lower cost structure or differentiate the product. If one can come up with a lower cost structure, such as driverless cars, and the other does not, that one wins. If one introduces a new product, such as bikes or scooters and breaks into a brand-new market, they escape Bertrand and gain an edge. But as long as the companies maintain a status of non-differentiated products, according to Bertrand, customers would go with the cheaper of the two, prices would go lower, drivers earn less, and economic benefits erode.

Bertrand assumed a very commoditized world and did not take into consideration the softer elements of competition. In the absence of cost-cutting solutions such as driverless cars, attributes such as “company culture” come into play. If two companies charge the same price, would consumers split 50-50 like Bertrand said, or would they pick the company they think is “nicer?” Or, what is the premium or discount attributable to “niceness” of companies?

In the war between Uber and Lyft, or in any other duopoly, the ability of companies to make calculated decisions at times of competition remains a vital piece of the puzzle. The strategy comes in two steps. First, all decisions must be made at optimal levels reaching a state of Nash equilibrium. At this point, there are no further decisions to make that’ll provide an additional economic benefit to either party. Once that’s done, then differentiation efforts begin so that the parties may escape Bertrand. And those happen on two fronts: cost and product differentiation. It’s certainly a complex task and both companies have smart teams in place to make the calculations. It will be exciting to watch the battles in the years to come.

(If you’re an investor, would it make sense to invest in both companies in a Bertrand duopoly? Perhaps that’s like betting on both black and red in a game of roulette. Remember, if the ball lands on zero, both bets lose!)

Disclaimer: Venture Science is a Lyft investor.



from TechCrunch https://tcrn.ch/2V6bYsx
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support