Shelegia_Motta_2021.IModel
1import platform 2import re 3 4# add typing support for Python 3.5 - 3.7 5if re.match("3.[5-7].*", platform.python_version()) is None: 6 from typing import Dict, Final 7else: 8 from typing import Dict 9 from typing_extensions import Final 10 11import abc 12import matplotlib.axes 13 14 15class IModel: 16 """ 17 Interface for all models in Shelegia and Motta (2021). 18 """ 19 def __init__(self): 20 self.ENTRANT_CHOICES: Final[Dict[str, str]] = {"complement": "C", "substitute": "S", "indifferent": "I"} 21 """ 22 Contains all the possible product choices of the entrant. 23 - complement (C): The entrant develops another complement for the primary product of the incumbent. 24 - substitute (S): The entrant develops a perfect substitute to the primary product of the incumbent. 25 - indifferent (I): The entrant is indifferent between the two options, mentioned above. 26 """ 27 self.INCUMBENT_CHOICES: Final[Dict[str, str]] = {"copy": "©", "refrain": "Ø"} 28 """ 29 Contains all the possible answers of the incumbent to the choice of the entrant. 30 - copy (©): The incumbent copies the complement of the entrant. 31 - refrain (Ø): The incumbent does not take any action. 32 """ 33 self.DEVELOPMENT_OUTCOME: Final[Dict[str, str]] = {"success": "Y", "failure": "N"} 34 """ 35 Contains all the possible outcomes of the development for the chosen product of the entrant or the merged entity. 36 - success (Y): The entrant has sufficient assets to develop the second product. 37 - failure (N): The entrant has not sufficient assets to develop the second product. 38 """ 39 40 @abc.abstractmethod 41 def _calculate_copying_fixed_costs_values(self) -> Dict[str, float]: 42 """ 43 Calculates the thresholds for the fixed costs for copying of the incumbent. 44 45 Number and type of the thresholds will be specific to the model. 46 47 Returns 48 ------- 49 Dict[str, float] 50 Includes the thresholds for the fixed costs for copying of the incumbent. 51 """ 52 pass 53 54 @abc.abstractmethod 55 def _calculate_asset_values(self) -> Dict[str, float]: 56 """ 57 Calculates the thresholds for the assets of the entrant. 58 59 Number and type of the thresholds will be specific to the model. 60 61 Returns 62 ------- 63 Dict[str, float] 64 Includes the thresholds for the assets of the entrant. 65 """ 66 pass 67 68 @abc.abstractmethod 69 def _calculate_payoffs(self) -> Dict[str, Dict[str, float]]: 70 """ 71 Calculates the payoffs for different market configurations. 72 73 Includes the following payoffs: 74 - pi(I): 75 - pi(E): 76 - CS: 77 - W: 78 79 Returns 80 ------- 81 Dict[str, float] 82 Includes the mentioned payoffs for different market configurations. 83 """ 84 pass 85 86 @abc.abstractmethod 87 def get_asset_values(self) -> Dict[str, float]: 88 """ 89 Returns the asset thresholds of the entrant. 90 91 Number and type of the thresholds will be specific to the model. 92 93 Returns 94 ------- 95 Dict[str, float] 96 Includes the thresholds for the assets of the entrant. 97 """ 98 pass 99 100 @abc.abstractmethod 101 def get_copying_fixed_costs_values(self) -> Dict[str, float]: 102 """ 103 Returns the fixed costs for copying thresholds of the incumbent. 104 105 Number and type of the thresholds will be specific to the model. 106 107 Returns 108 ------- 109 Dict[str, float] 110 Includes the thresholds for the fixed costs for copying of the incumbent. 111 """ 112 pass 113 114 @abc.abstractmethod 115 def get_payoffs(self) -> Dict[str, Dict[str, float]]: 116 """ 117 Returns the payoffs for different market configurations. 118 119 A market configuration can include: 120 - $I_P$ : Primary product sold by the incumbent. 121 - $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$. 122 - $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant. 123 - $E_C$ : Complementary product to $I_P$ currently sold by the entrant 124 - $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant. 125 <br> 126 127 | Market Config. | $\pi(I)$ | $\pi(E)$ | CS | W | 128 |-----------------------|:--------:|:--------:|:--:|:-:| 129 | $I_P$ ; $E_C$ | N.A. | N.A. | N.A. | N.A. | 130 | $I_P + I_C$ ; $E_C$ | N.A. | N.A. | N.A. | N.A. | 131 | $I_P$ ; $E_P + E_C$ | N.A. | N.A. | N.A. | N.A. | 132 | $I_P + I_C$ ; $E_P + E_C$ | N.A. | N.A. | N.A. | N.A. | 133 | $I_P$ ; $E_C + \\tilde{E}_C$ | N.A. | N.A. | N.A. | N.A. | 134 | $I_P + I_C$ ; $E_C + \\tilde{E}_C$ | N.A. | N.A. | N.A. | N.A. | 135 <br> 136 The payoffs are specific to the models. 137 138 Returns 139 ------- 140 Dict[str, Dict[str, float]] 141 Contains the mentioned payoffs for different market configurations. 142 """ 143 144 @abc.abstractmethod 145 def get_optimal_choice(self, A: float, F: float) -> Dict[str, str]: 146 """ 147 Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent. 148 149 The output dictionary will contain the following details: 150 151 - "entrant": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES)) 152 - "incumbent": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES) 153 - "development": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME) 154 155 To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model. 156 157 Parameters 158 ---------- 159 A : float 160 Assets of the entrant. 161 F : float 162 Fixed costs for copying of the incumbent. 163 164 Returns 165 ------- 166 Dict[str, str] 167 Optimal choice of the entrant, the incumbent and the outcome of the development. 168 """ 169 pass 170 171 @abc.abstractmethod 172 def plot_incumbent_best_answers(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 173 """ 174 Plots the best answers of the incumbent to all possible actions of the entrant. 175 176 Parameters 177 ---------- 178 axis : matplotlib.axes.Axes 179 Axis to draw the plot on. (optional) 180 **kwargs 181 Optional key word arguments for the best answers plot.<br> 182 - title: title on top of the plot, instead of the default title.<br> 183 - legend: If false, all legends are turned off.<br> 184 - options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.<br> 185 - asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.<br> 186 - costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.<br> 187 - legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).<br> 188 - x_max : Maximum number plotted on the x - axis.<br> 189 - y_max : Maximum number plotted on the y - axis.<br> 190 191 Returns 192 ------- 193 matplotlib.axes.Axes 194 Axis containing the plot. 195 """ 196 pass 197 198 @abc.abstractmethod 199 def plot_equilibrium(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 200 """ 201 Plots the equilibrium path based on the choices of the entrant and incumbent. 202 203 Parameters 204 ---------- 205 axis : matplotlib.axes.Axes 206 Axis to draw the plot on. (optional) 207 **kwargs 208 Optional key word arguments for the equilibrium plot.<br> 209 - title: title on top of the plot, instead of the default title.<br> 210 - legend: If false, all legends are turned off.<br> 211 - options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.<br> 212 - asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.<br> 213 - costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.<br> 214 - legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).<br> 215 - x_max : Maximum number plotted on the x - axis.<br> 216 - y_max : Maximum number plotted on the y - axis.<br> 217 218 Returns 219 ------- 220 matplotlib.axes.Axes 221 Axis containing the plot. 222 """ 223 pass 224 225 @abc.abstractmethod 226 def plot_payoffs(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 227 """ 228 Plots the payoffs for different market configurations. 229 230 Parameters 231 ---------- 232 axis : matplotlib.axes.Axes 233 Axis to draw the plot on. (optional) 234 **kwargs 235 Optional key word arguments for the payoff plot.<br> 236 - legend: If false, all legends are turned off.<br> 237 - products_legend: If true, a legend, containing all possible products of the entrant and the incumbent, will be added to the plot.<br> 238 - opacity : Opacity of the not optimal payoffs. (floating number between 0 and 1)<br> 239 240 Returns 241 ------- 242 matplotlib.axes.Axes 243 Axis containing the plot. 244 """ 245 pass 246 247 @abc.abstractmethod 248 def __str__(self) -> str: 249 """ 250 Returns a string representation of the object. 251 252 Includes: 253 - Asset thresholds of the entrant 254 - Fixed costs for copying thresholds of the incumbent. 255 - Payoffs for different market configurations for all stakeholders 256 257 Returns 258 ------- 259 String 260 String representation of the object. 261 """ 262 pass
16class IModel: 17 """ 18 Interface for all models in Shelegia and Motta (2021). 19 """ 20 def __init__(self): 21 self.ENTRANT_CHOICES: Final[Dict[str, str]] = {"complement": "C", "substitute": "S", "indifferent": "I"} 22 """ 23 Contains all the possible product choices of the entrant. 24 - complement (C): The entrant develops another complement for the primary product of the incumbent. 25 - substitute (S): The entrant develops a perfect substitute to the primary product of the incumbent. 26 - indifferent (I): The entrant is indifferent between the two options, mentioned above. 27 """ 28 self.INCUMBENT_CHOICES: Final[Dict[str, str]] = {"copy": "©", "refrain": "Ø"} 29 """ 30 Contains all the possible answers of the incumbent to the choice of the entrant. 31 - copy (©): The incumbent copies the complement of the entrant. 32 - refrain (Ø): The incumbent does not take any action. 33 """ 34 self.DEVELOPMENT_OUTCOME: Final[Dict[str, str]] = {"success": "Y", "failure": "N"} 35 """ 36 Contains all the possible outcomes of the development for the chosen product of the entrant or the merged entity. 37 - success (Y): The entrant has sufficient assets to develop the second product. 38 - failure (N): The entrant has not sufficient assets to develop the second product. 39 """ 40 41 @abc.abstractmethod 42 def _calculate_copying_fixed_costs_values(self) -> Dict[str, float]: 43 """ 44 Calculates the thresholds for the fixed costs for copying of the incumbent. 45 46 Number and type of the thresholds will be specific to the model. 47 48 Returns 49 ------- 50 Dict[str, float] 51 Includes the thresholds for the fixed costs for copying of the incumbent. 52 """ 53 pass 54 55 @abc.abstractmethod 56 def _calculate_asset_values(self) -> Dict[str, float]: 57 """ 58 Calculates the thresholds for the assets of the entrant. 59 60 Number and type of the thresholds will be specific to the model. 61 62 Returns 63 ------- 64 Dict[str, float] 65 Includes the thresholds for the assets of the entrant. 66 """ 67 pass 68 69 @abc.abstractmethod 70 def _calculate_payoffs(self) -> Dict[str, Dict[str, float]]: 71 """ 72 Calculates the payoffs for different market configurations. 73 74 Includes the following payoffs: 75 - pi(I): 76 - pi(E): 77 - CS: 78 - W: 79 80 Returns 81 ------- 82 Dict[str, float] 83 Includes the mentioned payoffs for different market configurations. 84 """ 85 pass 86 87 @abc.abstractmethod 88 def get_asset_values(self) -> Dict[str, float]: 89 """ 90 Returns the asset thresholds of the entrant. 91 92 Number and type of the thresholds will be specific to the model. 93 94 Returns 95 ------- 96 Dict[str, float] 97 Includes the thresholds for the assets of the entrant. 98 """ 99 pass 100 101 @abc.abstractmethod 102 def get_copying_fixed_costs_values(self) -> Dict[str, float]: 103 """ 104 Returns the fixed costs for copying thresholds of the incumbent. 105 106 Number and type of the thresholds will be specific to the model. 107 108 Returns 109 ------- 110 Dict[str, float] 111 Includes the thresholds for the fixed costs for copying of the incumbent. 112 """ 113 pass 114 115 @abc.abstractmethod 116 def get_payoffs(self) -> Dict[str, Dict[str, float]]: 117 """ 118 Returns the payoffs for different market configurations. 119 120 A market configuration can include: 121 - $I_P$ : Primary product sold by the incumbent. 122 - $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$. 123 - $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant. 124 - $E_C$ : Complementary product to $I_P$ currently sold by the entrant 125 - $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant. 126 <br> 127 128 | Market Config. | $\pi(I)$ | $\pi(E)$ | CS | W | 129 |-----------------------|:--------:|:--------:|:--:|:-:| 130 | $I_P$ ; $E_C$ | N.A. | N.A. | N.A. | N.A. | 131 | $I_P + I_C$ ; $E_C$ | N.A. | N.A. | N.A. | N.A. | 132 | $I_P$ ; $E_P + E_C$ | N.A. | N.A. | N.A. | N.A. | 133 | $I_P + I_C$ ; $E_P + E_C$ | N.A. | N.A. | N.A. | N.A. | 134 | $I_P$ ; $E_C + \\tilde{E}_C$ | N.A. | N.A. | N.A. | N.A. | 135 | $I_P + I_C$ ; $E_C + \\tilde{E}_C$ | N.A. | N.A. | N.A. | N.A. | 136 <br> 137 The payoffs are specific to the models. 138 139 Returns 140 ------- 141 Dict[str, Dict[str, float]] 142 Contains the mentioned payoffs for different market configurations. 143 """ 144 145 @abc.abstractmethod 146 def get_optimal_choice(self, A: float, F: float) -> Dict[str, str]: 147 """ 148 Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent. 149 150 The output dictionary will contain the following details: 151 152 - "entrant": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES)) 153 - "incumbent": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES) 154 - "development": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME) 155 156 To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model. 157 158 Parameters 159 ---------- 160 A : float 161 Assets of the entrant. 162 F : float 163 Fixed costs for copying of the incumbent. 164 165 Returns 166 ------- 167 Dict[str, str] 168 Optimal choice of the entrant, the incumbent and the outcome of the development. 169 """ 170 pass 171 172 @abc.abstractmethod 173 def plot_incumbent_best_answers(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 174 """ 175 Plots the best answers of the incumbent to all possible actions of the entrant. 176 177 Parameters 178 ---------- 179 axis : matplotlib.axes.Axes 180 Axis to draw the plot on. (optional) 181 **kwargs 182 Optional key word arguments for the best answers plot.<br> 183 - title: title on top of the plot, instead of the default title.<br> 184 - legend: If false, all legends are turned off.<br> 185 - options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.<br> 186 - asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.<br> 187 - costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.<br> 188 - legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).<br> 189 - x_max : Maximum number plotted on the x - axis.<br> 190 - y_max : Maximum number plotted on the y - axis.<br> 191 192 Returns 193 ------- 194 matplotlib.axes.Axes 195 Axis containing the plot. 196 """ 197 pass 198 199 @abc.abstractmethod 200 def plot_equilibrium(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 201 """ 202 Plots the equilibrium path based on the choices of the entrant and incumbent. 203 204 Parameters 205 ---------- 206 axis : matplotlib.axes.Axes 207 Axis to draw the plot on. (optional) 208 **kwargs 209 Optional key word arguments for the equilibrium plot.<br> 210 - title: title on top of the plot, instead of the default title.<br> 211 - legend: If false, all legends are turned off.<br> 212 - options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.<br> 213 - asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.<br> 214 - costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.<br> 215 - legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).<br> 216 - x_max : Maximum number plotted on the x - axis.<br> 217 - y_max : Maximum number plotted on the y - axis.<br> 218 219 Returns 220 ------- 221 matplotlib.axes.Axes 222 Axis containing the plot. 223 """ 224 pass 225 226 @abc.abstractmethod 227 def plot_payoffs(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 228 """ 229 Plots the payoffs for different market configurations. 230 231 Parameters 232 ---------- 233 axis : matplotlib.axes.Axes 234 Axis to draw the plot on. (optional) 235 **kwargs 236 Optional key word arguments for the payoff plot.<br> 237 - legend: If false, all legends are turned off.<br> 238 - products_legend: If true, a legend, containing all possible products of the entrant and the incumbent, will be added to the plot.<br> 239 - opacity : Opacity of the not optimal payoffs. (floating number between 0 and 1)<br> 240 241 Returns 242 ------- 243 matplotlib.axes.Axes 244 Axis containing the plot. 245 """ 246 pass 247 248 @abc.abstractmethod 249 def __str__(self) -> str: 250 """ 251 Returns a string representation of the object. 252 253 Includes: 254 - Asset thresholds of the entrant 255 - Fixed costs for copying thresholds of the incumbent. 256 - Payoffs for different market configurations for all stakeholders 257 258 Returns 259 ------- 260 String 261 String representation of the object. 262 """ 263 pass
Interface for all models in Shelegia and Motta (2021).
Contains all the possible product choices of the entrant.
- complement (C): The entrant develops another complement for the primary product of the incumbent.
- substitute (S): The entrant develops a perfect substitute to the primary product of the incumbent.
- indifferent (I): The entrant is indifferent between the two options, mentioned above.
Contains all the possible answers of the incumbent to the choice of the entrant.
- copy (©): The incumbent copies the complement of the entrant.
- refrain (Ø): The incumbent does not take any action.
Contains all the possible outcomes of the development for the chosen product of the entrant or the merged entity.
- success (Y): The entrant has sufficient assets to develop the second product.
- failure (N): The entrant has not sufficient assets to develop the second product.
87 @abc.abstractmethod 88 def get_asset_values(self) -> Dict[str, float]: 89 """ 90 Returns the asset thresholds of the entrant. 91 92 Number and type of the thresholds will be specific to the model. 93 94 Returns 95 ------- 96 Dict[str, float] 97 Includes the thresholds for the assets of the entrant. 98 """ 99 pass
Returns the asset thresholds of the entrant.
Number and type of the thresholds will be specific to the model.
Returns
- Dict[str, float]: Includes the thresholds for the assets of the entrant.
101 @abc.abstractmethod 102 def get_copying_fixed_costs_values(self) -> Dict[str, float]: 103 """ 104 Returns the fixed costs for copying thresholds of the incumbent. 105 106 Number and type of the thresholds will be specific to the model. 107 108 Returns 109 ------- 110 Dict[str, float] 111 Includes the thresholds for the fixed costs for copying of the incumbent. 112 """ 113 pass
Returns the fixed costs for copying thresholds of the incumbent.
Number and type of the thresholds will be specific to the model.
Returns
- Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
115 @abc.abstractmethod 116 def get_payoffs(self) -> Dict[str, Dict[str, float]]: 117 """ 118 Returns the payoffs for different market configurations. 119 120 A market configuration can include: 121 - $I_P$ : Primary product sold by the incumbent. 122 - $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$. 123 - $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant. 124 - $E_C$ : Complementary product to $I_P$ currently sold by the entrant 125 - $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant. 126 <br> 127 128 | Market Config. | $\pi(I)$ | $\pi(E)$ | CS | W | 129 |-----------------------|:--------:|:--------:|:--:|:-:| 130 | $I_P$ ; $E_C$ | N.A. | N.A. | N.A. | N.A. | 131 | $I_P + I_C$ ; $E_C$ | N.A. | N.A. | N.A. | N.A. | 132 | $I_P$ ; $E_P + E_C$ | N.A. | N.A. | N.A. | N.A. | 133 | $I_P + I_C$ ; $E_P + E_C$ | N.A. | N.A. | N.A. | N.A. | 134 | $I_P$ ; $E_C + \\tilde{E}_C$ | N.A. | N.A. | N.A. | N.A. | 135 | $I_P + I_C$ ; $E_C + \\tilde{E}_C$ | N.A. | N.A. | N.A. | N.A. | 136 <br> 137 The payoffs are specific to the models. 138 139 Returns 140 ------- 141 Dict[str, Dict[str, float]] 142 Contains the mentioned payoffs for different market configurations. 143 """
Returns the payoffs for different market configurations.
A market configuration can include:
- $I_P$ : Primary product sold by the incumbent.
- $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$.
- $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant.
- $E_C$ : Complementary product to $I_P$ currently sold by the entrant
- $\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant.
Market Config. | $\pi(I)$ | $\pi(E)$ | CS | W |
---|---|---|---|---|
$I_P$ ; $E_C$ | N.A. | N.A. | N.A. | N.A. |
$I_P + I_C$ ; $E_C$ | N.A. | N.A. | N.A. | N.A. |
$I_P$ ; $E_P + E_C$ | N.A. | N.A. | N.A. | N.A. |
$I_P + I_C$ ; $E_P + E_C$ | N.A. | N.A. | N.A. | N.A. |
$I_P$ ; $E_C + \tilde{E}_C$ | N.A. | N.A. | N.A. | N.A. |
$I_P + I_C$ ; $E_C + \tilde{E}_C$ | N.A. | N.A. | N.A. | N.A. |
The payoffs are specific to the models.
Returns
- Dict[str, Dict[str, float]]: Contains the mentioned payoffs for different market configurations.
145 @abc.abstractmethod 146 def get_optimal_choice(self, A: float, F: float) -> Dict[str, str]: 147 """ 148 Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent. 149 150 The output dictionary will contain the following details: 151 152 - "entrant": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES)) 153 - "incumbent": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES) 154 - "development": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME) 155 156 To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model. 157 158 Parameters 159 ---------- 160 A : float 161 Assets of the entrant. 162 F : float 163 Fixed costs for copying of the incumbent. 164 165 Returns 166 ------- 167 Dict[str, str] 168 Optimal choice of the entrant, the incumbent and the outcome of the development. 169 """ 170 pass
Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.
The output dictionary will contain the following details:
- "entrant": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
- "incumbent": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
- "development": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.
Parameters
- A (float): Assets of the entrant.
- F (float): Fixed costs for copying of the incumbent.
Returns
- Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
172 @abc.abstractmethod 173 def plot_incumbent_best_answers(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 174 """ 175 Plots the best answers of the incumbent to all possible actions of the entrant. 176 177 Parameters 178 ---------- 179 axis : matplotlib.axes.Axes 180 Axis to draw the plot on. (optional) 181 **kwargs 182 Optional key word arguments for the best answers plot.<br> 183 - title: title on top of the plot, instead of the default title.<br> 184 - legend: If false, all legends are turned off.<br> 185 - options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.<br> 186 - asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.<br> 187 - costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.<br> 188 - legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).<br> 189 - x_max : Maximum number plotted on the x - axis.<br> 190 - y_max : Maximum number plotted on the y - axis.<br> 191 192 Returns 193 ------- 194 matplotlib.axes.Axes 195 Axis containing the plot. 196 """ 197 pass
Plots the best answers of the incumbent to all possible actions of the entrant.
Parameters
- axis (matplotlib.axes.Axes): Axis to draw the plot on. (optional)
- **kwargs: Optional key word arguments for the best answers plot.
- title: title on top of the plot, instead of the default title.
- legend: If false, all legends are turned off.
- options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
- asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
- costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
- legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
- x_max : Maximum number plotted on the x - axis.
- y_max : Maximum number plotted on the y - axis.
- title: title on top of the plot, instead of the default title.
Returns
- matplotlib.axes.Axes: Axis containing the plot.
199 @abc.abstractmethod 200 def plot_equilibrium(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 201 """ 202 Plots the equilibrium path based on the choices of the entrant and incumbent. 203 204 Parameters 205 ---------- 206 axis : matplotlib.axes.Axes 207 Axis to draw the plot on. (optional) 208 **kwargs 209 Optional key word arguments for the equilibrium plot.<br> 210 - title: title on top of the plot, instead of the default title.<br> 211 - legend: If false, all legends are turned off.<br> 212 - options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.<br> 213 - asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.<br> 214 - costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.<br> 215 - legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).<br> 216 - x_max : Maximum number plotted on the x - axis.<br> 217 - y_max : Maximum number plotted on the y - axis.<br> 218 219 Returns 220 ------- 221 matplotlib.axes.Axes 222 Axis containing the plot. 223 """ 224 pass
Plots the equilibrium path based on the choices of the entrant and incumbent.
Parameters
- axis (matplotlib.axes.Axes): Axis to draw the plot on. (optional)
- **kwargs: Optional key word arguments for the equilibrium plot.
- title: title on top of the plot, instead of the default title.
- legend: If false, all legends are turned off.
- options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
- asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
- costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
- legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
- x_max : Maximum number plotted on the x - axis.
- y_max : Maximum number plotted on the y - axis.
- title: title on top of the plot, instead of the default title.
Returns
- matplotlib.axes.Axes: Axis containing the plot.
226 @abc.abstractmethod 227 def plot_payoffs(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: 228 """ 229 Plots the payoffs for different market configurations. 230 231 Parameters 232 ---------- 233 axis : matplotlib.axes.Axes 234 Axis to draw the plot on. (optional) 235 **kwargs 236 Optional key word arguments for the payoff plot.<br> 237 - legend: If false, all legends are turned off.<br> 238 - products_legend: If true, a legend, containing all possible products of the entrant and the incumbent, will be added to the plot.<br> 239 - opacity : Opacity of the not optimal payoffs. (floating number between 0 and 1)<br> 240 241 Returns 242 ------- 243 matplotlib.axes.Axes 244 Axis containing the plot. 245 """ 246 pass
Plots the payoffs for different market configurations.
Parameters
- axis (matplotlib.axes.Axes): Axis to draw the plot on. (optional)
- **kwargs: Optional key word arguments for the payoff plot.
- legend: If false, all legends are turned off.
- products_legend: If true, a legend, containing all possible products of the entrant and the incumbent, will be added to the plot.
- opacity : Opacity of the not optimal payoffs. (floating number between 0 and 1)
- legend: If false, all legends are turned off.
Returns
- matplotlib.axes.Axes: Axis containing the plot.