Алгоритмы неформально. Инструкция для начинающих питонистов - [18]
Алгоритмы, описанные в следующей главе, позволяют выполнять с математическими функциями некоторые практичные и полезные задачи: определять максимум и минимум. После того как мы обсудили алгоритмы вообще и их место в истории, вы начнете лучше понимать, что они собой представляют и как работают, и будете готовы заняться более серьезными алгоритмами, которые применяются в большинстве высокотехнологичных программных продуктов, разрабатываемых в наши дни.
3. Максимизация и минимизация
В жизни мы, как правило, стараемся избегать крайностей, но в мире алгоритмов интерес обычно представляют экстремальные значения. Некоторые мощные алгоритмы предназначены для поиска максимумов (например, максимальная прибыль, максимальная эффективность, максимальная производительность) и минимумов (минимальные затраты, минимальная вероятность ошибки, минимальный дискомфорт и т.д.). В этой главе мы изучим градиентный подъем и градиентный спуск — два простых, но действенных метода эффективного нахождения максимумов и минимумов функций. Кроме того, рассмотрим некоторые проблемы, присущие задачам максимизации и минимизации, и способы их решения. Наконец, мы обсудим, как узнать, уместно ли использовать тот или иной алгоритм в конкретной ситуации. Начнем с гипотетического сценария — выбора оптимальной ставки налога для максимизации доходов правительства и посмотрим, как использовать алгоритм для поиска решения.
Выбор ставки налога
Представьте, что вас избрали премьер-министром небольшой страны. Перед вами стоят амбициозные цели, но нет средств для их реализации. А значит, после вступления в должность вы первым делом должны максимизировать поступления от налогов, которые собирает ваше правительство.
Остается понять, какую ставку следует выбрать для максимизации налоговых поступлений. Если ставка налога составляет 0 %, то вы получите нулевые поступления в бюджет. При 100 % налогоплательщики наверняка постараются избежать какой-либо производственной деятельности и начнут искать лазейки настолько усердно, что поступления тоже будут близкими к нулю. Для оптимизации поступлений необходимо найти правильный баланс между ставками настолько высокими, что они подавляют производственную деятельность, и настолько низкими, что сборы оказываются недостаточными. Но чтобы достичь этого баланса, следует больше узнать о том, как налоговая ставка связана с поступлениями.
Шаги в правильном направлении
Допустим, вы обсуждаете проблему со своей командой экономистов. Они понимают, о чем идет речь, и возвращаются в научно-исследовательскую лабораторию. Там они применяют средства, используемые ведущими учеными-экономистами всего мира: колбы, астролябии, колеса с бегающими хомячками и ивовые прутья для лозоходства, чтобы определить точную связь между ставкой налога и поступлениями.
Через какое-то время экономисты сообщают, что нашли функцию, связывающую ставку налога с поступлениями, и написали ее для вас на Python. Можно предположить, что функция выглядит примерно так:
import math
def revenue(tax):
return(100 * (math.log(tax+1) - (tax - 0.2)**2 + 0.04))
Эта функция Python получает ставку налога в аргументе и возвращает числовой вывод. Сама функция хранится в переменной revenue. Вы запускаете Python для построения простого графика и вводите с консоли приведенную ниже программу. Как и в главе 1, мы воспользуемся модулем matplotlib ради функциональности построения графиков.
import matplotlib.pyplot as plt
xs = [x/1000 for x in range(1001)]
ys = [revenue(x) for x in xs]
plt.plot(xs,ys)
plt.title('Tax Rates and Revenue')
plt.xlabel('Tax Rate')
plt.ylabel('Revenue')
plt.show()
На графике приводятся налоговые поступления (в миллиардах денежных единиц вашей страны), которые ожидает получить ваша команда для всех ставок налога от 0 до 1 (где 1 соответствует 100 %-ной налоговой ставке). Если в вашей в настоящее время установлена ставка 70 %, то в код можно добавить две строки для нанесения этой точки на кривую:
import matplotlib.pyplot as plt
xs = [x/1000 for x in range(1001)]
ys = [revenue(x) for x in xs]
plt.plot(xs,ys)
current_rate = 0.7
plt.plot(current_rate,revenue(current_rate),'ro')
plt.title('Tax Rates and Revenue')
plt.xlabel('Tax Rate')
plt.ylabel('Revenue')
plt.show()
В итоге мы получаем простой график, как на рис. 3.1.
Рис. 3.1. Связь между ставкой налога и поступлениями; точка представляет текущее значение ставки
Согласно формуле экономистов, текущая ставка налога не обеспечивает максимальных поступлений в бюджет. Хотя простое визуальное изучение графика приблизительно показывает, какой уровень соответствует максимальным поступлениям, приближенная оценка вас не устраивает, и вы хотите найти более точное значение для оптимальной ставки налога. По графику видно, что любое повышение ставки от текущих 70 % приведет к снижению поступлений, а некоторое снижение текущей ставки должно повысить поступления, поэтому в данной ситуации максимизация поступлений требует снижения ставки налога.
В правильности этой оценки можно убедиться и более формально: для этого следует вычислить производную формулы поступлений, полученной от экономистов.
JavaScript еще никогда не был так прост! Вы узнаете все возможности языка программирования без общих фраз и неясных терминов. Подробные примеры, иллюстрации и схемы будут понятны даже новичку. Легкая подача информации и живой юмор автора превратят нудное заучивание в занимательную практику по написанию кода. Дойдя до последней главы, вы настолько прокачаете свои навыки, что сможете решить практически любую задачу, будь то простое перемещение элементов на странице или даже собственная браузерная игра.
В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.
PHP, в настоящее время, – один из наиболее популярных языков для реализации веб-приложений. Данный курс посвящен изучению его основ. Акцент делается на практическое применение полученных навыков. Язык PHP был создан для решения конкретной практической задачи в среде интернет (какой именно можно узнать, прочитав первую лекцию курса). Мы тоже постараемся не отвлекаться слишком сильно на теоретические рассуждения, и будем стремиться к решению какой-нибудь конкретной задачи в каждой из лекций. Большинство примеров взяты из реально существующей системы: виртуального музея истории информатики.
Вниманию читателей предлагается справочник по CSS.Справочник предназначается для людей, уже освоивших азы работы с HTML и CSS.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.