{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Marketinška strategija\n", "\n", "Podjetje bo kmalu uvedlo nov izdelek na zelo konkurenčen trg,\n", "zato trenutno pripravlja marketinško strategijo.\n", "Odločili so se, da bodo izdelek uvedli v treh fazah.\n", "V prvi fazi bodo pripravili posebno začetno ponudbo z močno znižano ceno,\n", "da bi privabili zgodnje kupce.\n", "Druga faza bo vključevala intenzivno oglaševalsko kampanjo,\n", "da bi zgodnje kupce prepričali, naj izdelek še vedno kupujejo po redni ceni.\n", "Znano je, da bo ob koncu druge faze\n", "konkurenčno podjetje predstavilo svoj izdelek.\n", "Zato bo v tretji fazi okrepljeno oglaševanje z namenom,\n", "da bi preprečili beg strank h konkurenci.\n", "\n", "Podjetje ima za oglaševanje na voljo $4$ milijone evrov,\n", "ki jih želimo čim bolj učinkovito porabiti.\n", "Naj bo $m$ tržni delež v procentih, pridobljen v prvi fazi,\n", "$f_2$ delež, ohranjen po drugi fazi,\n", "in $f_3$ delež, ohranjen po tretji fazi.\n", "Maksimizirati želimo končni tržni delež, torej količino $m f_2 f_3$.\n", "\n", "Denimo, da lahko v vsaki fazi porabimo poljubno pozitivno količino denarja\n", "(seveda glede na omejitev skupne porabe).\n", "Naj bodo torej $x_1$, $x_2$ in $x_3$ količine denarja v milijonih evrov,\n", "ki jih porabimo v prvi, drugi in tretji fazi.\n", "Vpliv na tržni delež je podan s formulami\n", "$$\n", "m = x_1 (10 - x_1), \\quad\n", "f_2 = 0.4 + 0.1 x_2, \\quad \\text{in} \\quad\n", "f_3 = 0.6 + 0.07 x_3 .\n", "$$\n", "Kako naj razdelimo sredstva?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Najprej si pripravimo spremenljivke." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "x1, x2, x3, z = var('x1 x2 x3 z') # z leži na intervalu [0, 4]\n", "res = [x1, x2, x3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Najprej poiščimo maksimum izraza $f_3$, če vrednost $x_3$ leži na intervalu $[0, z]$.\n", "Ker je $f_3$ linearen v $x_3$ s pozitivnim smernim koeficientom, maksimum leži na desnem robu intervala, torej pri $x_3 = z$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "f3 = 0.6 + 0.07*x3\n", "p3 = f3.subs(x3 == z)\n", "res = [x.subs(x3 == z) for x in res]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sedaj določimo $p_2(z)$, torej maksimalno vrednost produkta $f_2 f_3$, če v drugo in tretjo fazo skupaj vložimo znesek $z$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-0.00700000000000000*x2^2 + 0.00700000000000000*x2*z + 0.0320000000000000*x2 + 0.0280000000000000*z + 0.240000000000000" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2 = (0.4 + 0.1*x2) * p3.subs(z == z-x2)\n", "p2.expand()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Opazimo, da dobimo kvadratno funkcijo v $x_2$ z negativnim vodilnim koeficientom.\n", "Maksimum bomo torej poiskali tako, da bomo poiskali ničlo odvoda in preverili, če leži v intervalu $[0, z]$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[x2 == 1/2*z + 16/7]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol2 = solve(p2.derivative(x2) == 0, x2)\n", "sol2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pri vseh $z \\ge 0$ bo maksimum dosežen pri nekem $x_2 > 0$.\n", "Poglejmo, kdaj bo veljalo $x_2 \\le z$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([[z >= (32/7)]], 4.57142857142857)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sz2 = (x2 <= z).subs(sol2).solve(z)\n", "(sz2, sz2[0][0].rhs().n())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vidimo, da bo pri vseh $0 \\le z \\le 4$ maksimum funkcije dosežen desno od intervala $[0, 4]$.\n", "Tako sklenemo, da $p_2(z)$ maksimiziramo tako, da izberemo $x_2 = z$ - v tretjo fazo torej ne vlagamo ničesar." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0600000000000000*z + 0.240000000000000" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2 = p2.subs(x2 == z)\n", "res = [x.subs(z == 0, x2 == z) for x in res]\n", "p2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Poiščimo še maksimum izraza $p_1(4) = m f_1 f_2$, torej končnega tržnega deleža ob skupnem vložku $4$." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0600000000000000*x1^3 - 1.08000000000000*x1^2 + 4.80000000000000*x1" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1 = x1*(10-x1) * p2.subs(z == 4-x1)\n", "p1.expand()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Opazimo, da dobimo kubično funkcijo v $x_1$ s pozitivnim vodilnim koeficientom.\n", "Da poiščemo maksimum, bomo spet poiskali ničle odvoda." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([x1 == -2/3*sqrt(21) + 6, x1 == 2/3*sqrt(21) + 6],\n", " [2.94494953669611, 9.05505046330389])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol1 = solve(p1.derivative(x1) == 0, x1)\n", "(sol1, [e.rhs().n() for e in sol1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ker je manjša od ničel znotraj intervala $[0, 4]$, potem je tam tudi maksimum funkcije." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "p1 = p1.subs(sol1[0])\n", "res = [x.subs(z == 4-x1).subs(sol1[0]) for x in res]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Izpišimo še vrednost optimalne rešitve ter sredstva za vsako fazo." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0.746666666666666*sqrt(21) + 2.88000000000000, 6.30165651890036)\n", "[-2/3*sqrt(21) + 6, 2/3*sqrt(21) - 2, 0]\n", "[2.94494953669611, 1.05505046330389, 0.000000000000000]\n" ] } ], "source": [ "print(p1.expand(), p1.n())\n", "print(res)\n", "print([n(x) for x in res])" ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 8.3", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.15" } }, "nbformat": 4, "nbformat_minor": 2 }