Produced Under Scarcity Akhil Rao's blog

High orbit, low orbit - a satellite altitude game

This is a model I wrote some time ago, a very stylized special case of a more general recursive model I’m currently working on. Hopefully, the more general model will feature as a chapter of my dissertation, and this might be a subsection of that chapter. I think it’s a sort of interesting model in its own right, even apart from the setting.

The basic motivation is the “orbital debris” problem: as satellites are launched into orbit, there are some debris that accumulate and pose a threat to other objects in the orbital environment. There’s a pretty big literature on this in the aerospace engineering and astrophysics communities, and the popular press has written about this as well. I’ve blogged about a couple papers on the subject before (physics/engineering, economics).

The basic intuition is pretty straightforward and well-known in economics: pollution is a negative externality, firms don’t face the full cost of polluting the environment, they overproduce pollution relative to the socially optimum level. I’m not going to present the planner’s solution, but in the stylized model here firms can cooperate to reduce the amount of debris produced. Without cooperation, they’ll end up choosing higher orbits and producing more debris. The debris can destroy satellites (and that is bad).

In this model I’m focusing on how a firm’s optimal choice of altitude in low-Earth orbit is affected by another firm’s altitude choice. This is an inter-firm externality, which is a little different from the usual consumer-facing externality, but is conceptually similar to strategic substitutability in oligopoly games.

The model setting

Consider an environment with two orbits, high (H) and low (L). We can think of these as spherical altitude shells, similar to the approach described in Rossi et. al (1998).

There are 2 identical firms, each with 1 satellite per period. Debris decays completely after 1 period. Collisions completely destroy a satellite, and generate no debris. Satellites last 1 period, and then are properly disposed of. This lets me talk about dynamics while keeping the decision static.

is the orbit chosen by firm for its satellite. The probability that firm ’s satellite survives the period is . is the probability of a collision between two satellites in the same orbit*. Putting a satellite in orbit generates some debris in orbit for that period. is the probability a satellite in the low orbit is destroyed by debris from a satellite in the high orbit**.

*We could say that satellites never collide with each other, but the analysis carries through as long as satellites generate some collision probability for other satellites in the same shell. I think this is generally true, since objects like final stage boosters, random bits that break off, or dead satellites which are not properly disposed of generate such probabilities.

**The idea here is that debris orbits decay toward Earth. This is more relevant for objects in low-Earth orbit, which is what I’m thinking about with this model.

The returns from owning a satellite are normalized to 1, so that we can focus on the probabilities . With the above definitions, we can define the satellite survival probabilities for firm as

So being the only satellite in the high orbit is the best position to be in, since you’re not at risk from debris or the other satellite. It seems reasonable to assume that as long as the altitude shells aren’t too large.

The really important assumption is the relationship between and . If (case 1, debris is more likely to cause a collision than a satellite), we’ll end up with one Nash equilibrium in pure strategies. If (case 2), we can have up to three Nash equilibria in pure strategies. When we relax the assumption that debris decays completely at the end of the period and allow debris growth, we’ll have transitions between the two cases.

Solving the model

Case 1:

The game matrix:

  H L

(Best responses are underlined. Row player is the first entry, column player is the second.)

The only Nash equilibrium in pure strategies here is for both firms to go high, . I call this case “orbital pooling”.

The folk region:

Folk region for orbital pooling

(The images in this post are all photos of diagrams I drew in pencil in my notebook many months ago.)

This case is like a prisoner’s dilemma. Neither firm wants to be in the low orbit when the other firm can go high and make them take on risk. Both firms want to try to be the only firm in the high orbit with no risk - you can see this in the folk region diagram and best responses. So, both firms end up high and with risk.

Case 2:

The game matrix:

  H L

There are up to three Nash equilibria in pure strategies here: , and . The equilibrium is possible if . I call this case “orbital separation”.

The folk region:

Folk region for orbital separation

The intuition here is straightforward: pooling on the same orbit is worse than (or, if , as good as) mixing it up, so the firms mix it up.

Orbital separation has less overall risk and debris than orbital pooling. The firm which went low bears more risk than the firm which went high under orbital separation, but the orbits are cleaner overall. If we had more realistic debris dynamics (where debris could interact with other debris to generate more debris), orbital separation would be even better than orbital pooling.

There are four inferences we can draw about the process dynamics from this:

  1. If is initially low but grows faster than , orbital separation will transition to orbital pooling
  2. If increases at the same rate as or a rate slower than , orbital separation is sustainable
  3. If decreases faster than , orbital pooling can transition to orbital separation
  4. Orbital pooling will increase

Let’s look at the debris dynamics a little more formally.

Putting some debris dynamics in

We’ll keep it simple here: debris in the low orbit will decay each period at a rate of , and launches to the high orbit will generate many debris in the low orbit. Letting be the next period debris stock, the three cases for the debris law of motion are

The diagram below shows the three possible fixed points of debris:

Debris fixed points

If both firms go low, the fixed point will be debris in the low orbit. If the firms separate, it will be . If the firms pool, it will be . The next diagram shows the returns from orbital pooling and orbital separation as a function of the current period debris stock .

Payoff-debris plot

(The x and y axes are flipped because economics.) is a debris threshold. Above , orbital pooling dominates orbital separation, and vice versa below .

One question is whether the steady state debris level under orbital separation is higher or lower than the pooling-separation threshold, i.e. is .

If , then will occur, then firms will shift from orbital separation to orbital pooling, and will be the final debris steady state.

If , will occur, and firms will stay in orbital separation.

Below are payoff-debris plots for orbital separation and orbital pooling (with proper x-y axes):

Pooling dominant

Separating dominant

Cooperation with a grim trigger

The folk region diagrams show us that cooperating to get higher payoffs is generally possible. One way to see what the cooperation could look like is to write a trigger strategy for an infinitely repeated game and then see when it will/won’t lead to cooperation.

The trigger strategy for firm is:

  • Play if plays
  • If firm deviates, play forever

Firm ’s strategy is defined similarly.

We can see that there’s no incentive to deviate from to , only from to . Assuming the firms share a discount factor and expanding out the series of payoffs, they’ll cooperate as long as

So, they can cooperate and alternate orbital separation with a grim trigger if . We can get a sense for how likely this cooperation is in a payoff space,

Cooperation possibility

So, cooperation seems more likely when orbital separation is already the Nash equilibrium. This seems intuitive enough to me.

Concluding thoughts

This is obviously a very stylized model, but I think the general notion of orbital separation vs orbital pooling is more generally applicable. I think this conclusion is kinda neat.

With more altitudes, I would expect the pooling/separation dynamic to result in firms moving progressively higher in LEO. I think we can sort of see that in SpaceX and OneWeb’s altitude choices for their announced constellations - around 1,200 and 1,100 km up, close to or a little higher than the LEO altitudes which are most-used right now. Obviously there’s a lot more than collision risk going into the choice of altitude for a constellation, but I expect the risk to be a factor.

Adding the benefits to a particular altitude (e.g. coverage area) parameterizes the problem some more, but doesn’t seem to add any interesting economic dynamics. Launch costs are necessary in the dynamic decision model, but can be ignored here. Allowing satellites to last more than one period really complicates the economic dynamics, as does adding more firms or altitudes. The physical dynamics are cool and have been studied fairly well, but the economic dynamics have not really been studied at all. I may be biased - I think the exciting action in the space debris problem is in the economic dynamics.

I would really like to model constellation size choices, but again the economic dynamics make it really complicated. I wrote a single-shell model of comparative steady state constellation choices with free entry and debris accumulation for a class last semester which I might be able to extend with altitudes. The steady states are not easy to compute - mechanically, the problem is that the debris accumulation can make the cost function concave, making the firm’s optimization problem nonconvex. Getting the full transition paths would be cool and presumably even harder. I’m working on this, but I don’t expect to get the most general case with constellations, multiple firms, multiple altitudes, and debris accumulation any time soon.

View or add comments

Some statistics from a widget industry

An unnamed source sent me some fun datasets for an industrially-produced widget sold in Producistan for P-dollars (denoted $). The widget manufacturers seem to compete in a monopolistically competitive industry. There may be some vertical and horizontal integration, but I can’t see it in the data I have.

This post, like the previous one, is just a fun exercise in holiday programming. I found a neat R package, GGally, while writing this.

The data

I’ll look at two datasets here: one a spreadsheet with data aggregated to the brand level where each row is a separate brand observation, and another spreadsheet with data broken down to a products offered by different brands. The data come from Producistan’s popular online shopping portal, and include the number of reviews per firm and per product as well as the average review ranking (usual 1-5 scale).

I have a third dataset where I linked the two by brand. I haven’t done anything with the linked dataset, but I like knowing it’s an option.

My source would prefer the data not be public, so I’ve loaded the spreadsheets from a pre-saved workspace and anonymized the firms and products. I’m not really interested in the industry, and my source doesn’t really care about the code and pictures being public.

Plots and regressions and stuff

Let’s look at the aggregated data first.

Aggregated data


# the aggregated data
wagg <- dataset$wagg

# matrix of scatterplots, densities, and correlation coefficients

plot of chunk unnamed-chunk-1

I really like the scatterplot matrix produced by ggpairs(). The diagonal is density plots for the variables, the upper triangular has correlation coefficients between the row and column variables, and the lower triangular has pairwise scatterplots with the row variable on the y-axis and the column variable on the x-axis. The scatterplots would be more useful with outliers trimmed, but I think there’s some utility to keeping them in. Let’s move through the diagonal and lower triangular column by column.

It looks like there are a lot of firms with 0-50 SKUs offered, and very few with more than that. I think there may be only one with more than 300 offered. Most firms have a decent price spread, but firms with a lot of SKUs tend to have prices below $20,000. Most of these SKUs have on the order of tens or hundreds of reviews, but a handful of firms with lots of SKUs have thousands of reviews. The phrase “long tail” comes to mind here.

I’m not sure how much we can glean from the correlation numbers. They’re just raw correlations, not controlling for anything or accounting for outliers, so I won’t spend any more time on them.

The dispersion variable is interesting. It’s the difference between the maximum and minimum observed prices for the item. My source tells me that a number of the listings they scraped for the data include fraudulent listings with prices that are way too high/low. I’m not sure what the purpose of these listings is, but it looks like products with very few reviews seem to have higher dispersions (though the correlation coefficient isn’t very high).

I think one of the weaknesses of the ggpairs() plots (and maybe scatterplot matrices in general) is that the y-axis scales aren’t always easy to figure out. The density plots, for example, are on a different scale from the scatterplots, but it’s hard to show that in a pretty way.

Now let’s run some simple linear regressions:

wagg <- dataset$wagg

# What's the relationship between dispersion and reviews, number of SKUs offered, and the average price?
m1.wagg <- lm(dispersion ~ Tot.Rvws + SKUs + Avg.Price, data=wagg)
## Call:
## lm(formula = dispersion ~ Tot.Rvws + SKUs + Avg.Price, data = wagg)
## Residuals:
##    Min     1Q Median     3Q    Max 
## -44701  -3604     95    909  65780 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.292e+03  1.450e+03  -0.891    0.374    
## Tot.Rvws    -1.299e+00  2.476e+00  -0.525    0.601    
## SKUs         1.201e+02  2.585e+01   4.647 7.29e-06 ***
## Avg.Price    7.889e-01  9.182e-02   8.592 9.93e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Residual standard error: 13970 on 151 degrees of freedom
## Multiple R-squared:  0.4085,	Adjusted R-squared:  0.3968 
## F-statistic: 34.76 on 3 and 151 DF,  p-value: < 2.2e-16
# What's the relationship between the average price and the total number of reviews and SKUs offered?
m2.wagg <- lm(Avg.Price ~ Tot.Rvws + SKUs, data=wagg)
## Call:
## lm(formula = Avg.Price ~ Tot.Rvws + SKUs, data = wagg)
## Residuals:
##    Min     1Q Median     3Q    Max 
## -13505  -8130  -5456   3503  62986 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 8839.512   1061.816   8.325 4.54e-14 ***
## Tot.Rvws      -1.802      2.183  -0.825    0.410    
## SKUs          17.967     22.789   0.788    0.432    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Residual standard error: 12340 on 152 degrees of freedom
## Multiple R-squared:  0.005636,	Adjusted R-squared:  -0.007447 
## F-statistic: 0.4308 on 2 and 152 DF,  p-value: 0.6508

The standard errors aren’t robust, so I’m ignoring the t-stat/p-values here. I wouldn’t take these regressions very seriously - they’re just giving fancier correlations than the raw coefficients in the scatterplot matrix. Caveats issued, let’s read the tea leaves look at the parameter estimates.

From the first model, it looks like there is a positive correlation with the dispersion and the number of SKUs, and a positive correlation with the average price. There’s maybe a small negative correlation between the dispersion and the total number of reviews.

From the second model, it looks like a firm’s average price has a positive correlation with the number of SKUs the firm offers, and a small negative correlation with the number of reviews. These support a story where firms with more SKUs tend to target higher-income markets more aggressively, and where firms with higher prices tend to have fewer sales, but the standard errors are so large that it’s hard to buy the story just from the data.

Ok, let’s look at the disaggregated data now.

Disaggregated data

The prices have some commas and ranges in them, so they need to be cleaned before we can work with them. Getting rid of the commas is an easy application of gsub(). The ranges are a little trickier. There are dashes and number pairs in the fields. Getting rid of them and picking a single number would be fairly easy application of str_split_fixed() from the stringr library, but I’d like to take an average. That needs a few more lines.

In the end, I couldn’t think of an elegant one-liner to get the averages I wanted in the one minute I spent thinking about the problem. My lazy “non-R” thought was to write a for loop, but copy-pasting and editing the values ended up being just as easy. If I get a bigger dataset with more ranges, it would be worth it to spend a little more time writing something that scales better.


# the aggregated data
wmic <- dataset$wmic

# clean commas out of 'price' variable, take average of ranges, make numeric, add back to wmic
price.orig <- wmic$Price
wmic <- wmic[,-3]
Price <- gsub(",", "", price.orig)
duals.idx <- grep("-", Price, value=FALSE) #i love grep.
duals.vals <- grep("-", Price, value=TRUE)
duals.split <- as.numeric(str_split_fixed(duals.vals,"-",2))
duals.means <- c(mean(duals.split[1:2]),mean(duals.split[3:4]),mean(duals.split[5:6]),mean(duals.split[7:8])) #the inelegant copy-pasta solution
Price[duals.idx] <- duals.means
Price <- as.numeric(Price)
wmic <- cbind(wmic,Price)

# matrix of scatterplots, densities, and correlation coefficients
output <- ggpairs(wmic[,3:5])

plot of chunk unnamed-chunk-3

A lot of the products don’t have reviews or ratings.

Starting from the central density: most products have ratings around 4. Moving to the left, it looks like products with ratings around 4 tend to have the most reviews, as we might expect if having a rating is correlated with the number of reviews. Moving down, it looks like products with reviews and ratings tend to be lower-priced. One story for this is that higher-priced products sell fewer units.

Let’s look at the average price by brand now.


# hedonic regression to get the average price per brand
m1.wmic <- lm(Price ~ factor( - 1, data=wmic)

# plot the average prices with error bars
# first, get the prices
brands <- data.frame(summary(m1.wmic)$coef[summary(m1.wmic)$coef[,4] <= .1, 1]) # only grab brands with enough products for error bars which exclude 0 (p-value less than 0.1)
labs <- rownames(brands)
labs <- str_split_fixed(labs,".id",2) #have to leave the close parens alone since str_split_fixed looks for regular expressions
brands <- cbind(labs[,2],brands)
colnames(brands) <- c("brand","price")
rownames(brands) <- NULL
brands$brand <- gsub(")", "", brands$brand) #get rid of that annoying close parens

# next, get the standard errors
ses <- coef(summary(m1.wmic))[,2]
ses <-
labs <- rownames(ses)
labs <- str_split_fixed(labs,".id",2)
ses <- cbind(labs[,2],ses)
colnames(ses) <- c("brand","error")
rownames(ses) <- NULL
ses$brand <- gsub(")", "", ses$brand)

# stick them together and define the limits object for geom_errorbar
sticky <- merge(brands,ses,by="brand")
limits <- aes(ymax= (sticky$price + sticky$error), ymin= (sticky$price - sticky$error))

# finally, the plot!
ggplot(data=sticky, aes(x=brand,y=price)) + geom_bar(stat="identity", col="blue") + labs(title="Average price by brand") + geom_errorbar(limits,width=0.2)

plot of chunk unnamed-chunk-4

I dropped the brands with too few products for error bars which exclude zero. This also makes the plot slightly more legible - the full plot has over 150 brands, and is just not very easy to read. It looks kinda like something we’d get out of a Hotelling model of monopolistic competition, with maybe heterogeneous consumers/firms. Most firms seem to stay in the $20,000 or less price range, with a few gunning for the higher-end segments.

Let’s wrap up with some more linear regressions:

# What's the relationship between price, reviews, and ratings, controlling for brand?
m2.wmic <- lm(Price ~ - 1 + Reviews + Rating, data=wmic)
## Call:
## lm(formula = Price ~ - 1 + Reviews + Rating, data = wmic)
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -5001  -1547  -1329   -684  98761 
## Coefficients:
##         Estimate Std. Error t value Pr(>|t|)    
##  -15.679      8.568  -1.830   0.0678 .  
## Reviews   -3.951      5.002  -0.790   0.4300    
## Rating  1174.170    288.390   4.071 5.33e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Residual standard error: 9443 on 571 degrees of freedom
##   (2398 observations deleted due to missingness)
## Multiple R-squared:  0.07574,	Adjusted R-squared:  0.07089 
## F-statistic:  15.6 on 3 and 571 DF,  p-value: 9.186e-10

The variable should be entered as a factor in m2.wmic rather than a numeric, but this makes the output a little cleaner and we’re not taking these regressions very seriously anyway.

It looks like higher-rated products tend to be higher-priced, controlling for the number of reviews and the identity of the firm. It also looks like the number of reviews is negatively correlated with the price. These results are consistent with a story where price is positively correlated with quality and negatively correlated with sales, and sales are positively correlated with the number of reviews (the story for the sign of the reviews coefficient is just a fancier way to say “demand slopes downward”).


Widgets in Producistan look like a monopolistically competitive industry. Price might be positively correlated with quality, and demand slopes downward. Firms with more products might go for the higher-WTP consumers more aggressively on average, while making fewer sales. Storytime aside, ggpairs() is a cool function.

View or add comments

Visualizing helmet weights

My cousin sent me some data on motorcycle helmet weights for a project he’s working on. I thought it would be fun to slice it up and look at it a bit instead of working on things I should be working on.

The data

The dataset is a spreadsheet with 4 columns and 135 rows. The columns are: a URL, a brand, a model name, and a weight.

Some plots



hels <- read.xlsx("C:/Users/Akhil/Documents/ weights.xlsx",1)

# a histogram of weights
ggplot(data=hels, aes(hels$Grams)) + geom_histogram(binwidth=50, breaks=seq(min(hels$Grams),max(hels$Grams),by=50),col="red") + labs(title="Histogram of helmet weights, 50 gram bins") + labs(x="Grams", y="Count")

plot of chunk unnamed-chunk-1

# let's slice this by brand
byBrand <- lm(Grams ~ Brand - 1, data = hels)
brands <- coef(byBrand)
brands <-
labs <- rownames(brands)
labs <- str_split_fixed(labs,"Brand",2)
brands <- cbind(labs[,2],brands)
colnames(brands) <- c("brand","weight")
rownames(brands) <- NULL

ggplot(data=brands, aes(x=brand,y=weight)) + geom_bar(stat="identity", col="blue") + labs(title="Average weight by brand")

plot of chunk unnamed-chunk-1

# which brand has the lightest/heaviest helmets?
##      brand weight
## 5 Biltwell 1227.5
##   brand weight
## 7  GMax   1966
# how many models are there per brand?
models <- aggregate(data.frame(count = hels$Brand), list(value = hels$Brand), length)
mean(models$count) # average models per brand
## [1] 5.4
ggplot(data=models, aes(x=value,y=count)) + geom_bar(stat="identity", col="blue") + labs(title="Number of models per brand")

plot of chunk unnamed-chunk-1

What can we say?

It looks like most helmets cluster around the 1.6 kg range. Biltwell has the lightest helmets, with an average weight of 1227.5 grams, and Gmax the heaviest at a whopping 1966 grams - almost 2 kgs!

Of course, Gmax only has 1 helmet in this dataset. AGV and HJC are the kings of variety, with 14 models each in this dataset. Bell and LS2 are close runners up with 12 models each. Fly, GMax, Joe Rocket, Klim, and Vemar only have 1 model each in this dataset. In this dataset, brands have an average of 5.4 models.

The x axis labels on the histograms are messy. I don’t feel like spending the time to pretty them up. I have no idea if this information is in any way useful to anyone, but it was a fun exercise.

View or add comments

Broadcasting in the Dark Forest

I read Cixin Liu’s The Three-Body Problem and The Dark Forest a while ago. If you like science fiction, I highly recommend both of them. I hear the English version of the third book in the series, Death’s End, is coming out on September 20th. I’m looking forward to it.

Though I think Three-Body Problem is the better story of the two, The Dark Forest had some interesting ideas of its own. The most interesting to me came late in the plot: a game theoretic explanation of the Fermi Paradox. From wikipedia’s page about TDF,

The universe is full of life. Life in the universe functions on two axioms: 1. Life’s goal is to survive and 2. That matter (resources) are finite. Like hunters in a dark forest, life can never been sure of alien life’s true intentions. The extreme distances between stars creates an insurmountable ‘Chain of Suspicion’ where the two civilizations cannot communicate fast enough to relieve mistrust, making conflict inevitable. Therefore, it is in every civilization’s best interests to preemptively strike any developing civilization before it can become a threat.

These axioms really appealed to me; “utility maximization” and “scarcity” are foundational in economics, and I like seeing them applied in science fiction settings.

This philosophy stackexchange thread has a nice discussion of the “Dark Forest Postulate” (including a simple matrix game formalizing the intuition from OP) and its assumptions. TL,DR: the Dark Forest assumptions might not hold, and there are many possible explanations for the Fermi Paradox.

Another assumption I don’t recall being stated explicitly in the book (but I think is important to the DF postulate) is speed-of-light restrictions on communication and travel - otherwise, the cost of communication/travel could be low enough to support cooperative equilibria.

In any case, I liked the idea, and wanted to try writing down a formal model in that vein. The question I consider here is: when is it optimal for a species to broadcast its presence to the universe at large?

The Model

Let species be a species deciding whether or not to broadcast its presence, . Any species is characterized by two parameters: its technology and its resources . Resources are matter and energy, and can be measured in energy units. I’m not sure how technology is measured, but I don’t think it’s too unreasonable to assume we can at least rank levels of technological development. Maybe it’s maximum energy consumption from a unit of resources, so then it’s energy units as well.

Broadcasting () is costless, and reveals species ’s presence to some other species with probability . If does not broadcast its presence, it gets to hide without ever being discovered.

A more involved model might actually model as a function of the type of broadcast, density of stars in the local neighborhood of , add a cost to broadcasting, maybe even add elements of faking its type. This is not that model.

Assumption 1: and , where and are their respective CDFs. and both also have PDFs, and expectations , .

Corollary 1a: With nothing else known about and , by the Principle of Maximum Entropy and . (I don’t think matter and energy are really uniformly distributed throughout the universe, but I’m not sure what other tractable distribution would be reasonable here.)

Assumption 1 encodes the notions of finite resources and potentially unbounded technological advancement (handwaving at thermodynamic constraints), while Corollary 1a gives the maximum entropy probability distributions under those assumptions. I think maximum entropy is an appropriate principle here since functional forms are convenient but anything else would impose stronger assumptions.

Assumption 2: Any species attempts to maximize a concave utility function , and receives utility from technology and resources as .

Assumption 2a: satisfies Inada conditions, and .

Assumption 2 captures the idea that a species is better off with higher levels of technology/resources subject to diminishing marginal utility, and tries to be as well off as it can. It could be made more general with instead of just , but I don’t think it’s necessary for a simple model. Assumption 2a captures the notion that a species considers total destruction (no resources/no technology) the worst possible outcome, and has marginal utility at infinitely high levels of technology. I’m not sure if the latter really matters in this setting, but the former will be important and it seemed weird to have one without the other.

Assumption 3: When two species and interact and both survive the interaction, their resources after interacting are given by the solution to the Nash Bargaining problem

Species ’s resources after the interaction are , and species ’s are . Species ’s expectation of prior to the interaction is . For simplicity, I ignore potential technology transfers; each species still has technology and after the interaction.

I think Assumption 3 is strong, but maybe not unreasonable. NBS is a convenient assumption for sure. The idea I wanted to get at was that they’ll split the total resources between them in proportion to their levels of technological development. The form of also implies that species knows its own level of technological development and resource stock, but not species ’s until they interact. I think ignoring technology transfers makes this a little more pessimistic/conservative, as well as more tractable. I don’t think it affects the qualitative conclusions.

Assumption 4: When two species and interact, the probability that the one with the lower level of technology (say it’s ) does not survive the interaction is given by . The more technologically advanced species has net resources after the interaction.

Assumption 4 is strong, but I don’t know a weaker way to encode the probability that a species is destroyed by interacting with a technologically more advanced one. I calculated assuming knows , so the only unknown is .

The net resources bit isn’t to say that the more advanced species is going to try to steal the less advanced species’ resources (though that’s a possibility), just that the stuff’s there for the taking after the less advanced species is wiped out and I assume species takes it. Whether takes the resources or not doesn’t really matter to ’s decision to broadcast or not, since would be dead. I ignore the potential incentive of finding a weaker species and killing them and taking their stuff in the analysis below.


Let assumptions 1, 2, 3, and 4 hold. Let . Species ’s value function is

is ’s utility from not broadcasting (), and is ’s utility from broadcasting (). It is optimal for to broadcast its existence to the galaxy at large if

The concavity of from assumption 2 tells us that the bound on in is non-negative if , which implies . In words, ’s technology/resource ratio should be at least as high as the average technology/resource ratio for broadcasting to be worth the risk of extinction. This is coming from the Nash Bargaining mechanism, since wants to broadcast only if there are good odds it will come out ahead in the event of a peaceful interaction.

Corollary 1a lets us clean up the bound on to say that it’s non-negative if . I suppose this is at least in principle computable, though the uniform distribution assumption is sketchy. We can also do some basic comparative statics to say that is more likely to broadcast if

  1. the maximum potential resources available to are larger
  2. has more resources
  3. the average level of technological development is lower

Under corollary 1a, any species with no information about the distribution of except for its own technology should be cautious: the probability that they are below the universal average level of technological development is .

Assumption 2a makes the bound on much more pessimistic. With 2a, no matter what ’s resource level is, means broadcasting is never worth the risk of getting destroyed (left with no technology/resources).

What can we say about the distribution of broadcasting species in the universe? If assumption 2a holds, it’s a spike at since no one wants to broadcast and risk annihilation. Let’s suppose 2a doesn’t hold, and express as a lower bound on :

The distribution of will follow an exponential distribution, truncated from below at . The PDF for is

for some (but not all) admissible values of and . The probability that is below is

If , this is higher than .

Moral of the Model

Be careful about broadcasting your species’ presence to the universe. If there is nothing worse than annihilation, never broadcast. If you’re willing to risk annihilation and you haven’t found any evidence of a species other than your own… your technology is probably below average, so be careful anyway.

View or add comments

On the need for mathematical space economics

On the whole, biologists tend to treat the fisherman as an exogenous element in their analytical model, and the behavior of fishermen is not made into an integrated element of a general and systematic “bionomic” theory… the “overfishing problem” has its roots in the economic organization of the industry.

  • H. Scott Gordon, The Economic Theory of a Common Property Resource: The Fishery

Gordon’s critique of the state of fisheries management in 1957 seems very relevant to the state of the physics and engineering literature on orbital debris modeling. There are extremely sophisticated mathematical and statistical models of the physics involved, but the farthest any paper in this literature I’ve seen go toward integrating the behavioral responses of orbit users to the state of the orbital environment is Bradley and Wein (2009)

Economists have increasingly become aware of the orbital debris problem, and the issues with orbital management more generally. A lot of the work I’ve seen so far in space economics concerning orbital debris has been in the “law and economics” tradition. A brief selection of some of the work in this vein: Macauley (1998) (a conceptual framework and a model to estimate welfare costs of non-market geostationary belt allocation procedures and potential gains from market procedures),Senechal (2007) (what should we think about when drafting and negotiating an orbital debris convention), Weeden and Chow (2012) (a framework for potential policies using Ostrom’s principles for common-pool resources), Salter (2015) (clarifying the difficulties and costs private and public actors must consider), and of course the excellent Adilov, Alexander, and Cunningham (2015) (an economic model of earth orbit debris).

Macauley (1998) stands out as the only mathematical economic model I’ve seen of supply and demand factors orbital use which includes electromagnetic spectrum use. Adilov, Alexander, and Cunningham (2015) stands out as the only mathematical economic model I’ve seen of satellite launch behavior and orbital debris generation.

These models contribute to our understanding of the gaps between decentralized orbital and spectrum use without markets, with markets, and with an infeasible social planner, so that we have some sense of what we stand to gain by implementing orbital management institutions. The physical and engineering models describe what the physical constraints on such institutions are, and offer baseline values with which to calibrate and test economic models of specific use patterns.

This is all incredibly valuable.

Macauley (1998) is particularly notable to me for 2 reasons: (a) it was written in the 90s (the earliest draft I’ve seen is from 1994), before historically low launch costs and the space industry boom; (b) most of the current discussion I see of the economics of orbit focuses on orbital debris, but the evidently-less-sexy issues with spectrum use seem to attract considerable regulatory scrutiny.

Based on my studies in this area, I think there is still a need for a “Schaefer model of orbital management” - a dynamic economic model that characterizes the interaction between launchers’ behavior and the physical constraints of orbital use (i.e., the orbital mechanics of the debris problem and the physics of electromagnetic spectrum use). Such a model would be generalizable to: (a) the many uses of orbits, from telecommunications to imaging to tourism; (b) the different orbits in use, from LEO regimes to the GEO belt; and would provide a valuable benchmark against which policies could be measured and designed.

View or add comments