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
class IModel:
 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).

ENTRANT_CHOICES: Final[Dict[str, str]]

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.
INCUMBENT_CHOICES: Final[Dict[str, str]]

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.
DEVELOPMENT_OUTCOME: Final[Dict[str, str]]

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.
@abc.abstractmethod
def get_asset_values(self) -> Dict[str, float]:
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.
@abc.abstractmethod
def get_copying_fixed_costs_values(self) -> Dict[str, float]:
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.
@abc.abstractmethod
def get_payoffs(self) -> Dict[str, Dict[str, float]]:
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.
@abc.abstractmethod
def get_optimal_choice(self, A: float, F: float) -> Dict[str, str]:
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:

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.
@abc.abstractmethod
def plot_incumbent_best_answers( self, axis: matplotlib.axes._axes.Axes = None, **kwargs) -> matplotlib.axes._axes.Axes:
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.
Returns
  • matplotlib.axes.Axes: Axis containing the plot.
@abc.abstractmethod
def plot_equilibrium( self, axis: matplotlib.axes._axes.Axes = None, **kwargs) -> matplotlib.axes._axes.Axes:
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.
Returns
  • matplotlib.axes.Axes: Axis containing the plot.
@abc.abstractmethod
def plot_payoffs( self, axis: matplotlib.axes._axes.Axes = None, **kwargs) -> matplotlib.axes._axes.Axes:
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)
Returns
  • matplotlib.axes.Axes: Axis containing the plot.