Py4science

From Wikimization

(Difference between revisions)
Jump to: navigation, search
(Removing all content from page)
Line 1: Line 1:
-
<center><big><b>Использование языка Python для разработки научно-технического программного обеспечения</b></big></center>
 
- 
-
<big>'''Предисловие.'''</big><br>В этой статье мы рассмотрим преимущества и недостатки использования языка Python в научно-инженерных приложениях как альтернативы традиционным C, C++, Fortran и, прежде всего, MATLAB, Octave и другим математическим пакетам. Она написана по мотивам одноименного семинара, прошедшего 2009-02-05 в институте кибернетики НАНУ. Там я допустил ряд неточностей и оговорок, которые и собираюсь исправить в этой статье (перед докладом присутствующие попросили сократить его с предложенных мне начальством и планировавшихся 40-60 минут до 30, что сказалось на качестве, к тому же, наверное, повлияло то, что с самого утра и до доклада в 15-00 я так и не успел ничего поесть:) ). Тезисы упомянутого семинара можно скачать [ftp://ftp.linux.kiev.ua/pub/projects/openopt/files/presentation/py4science/ здесь]. <br>
 
-
Статья написана по просьбе developers.org.ua и, соответственно, выдержана в стиле других статей этого сайта.
 
- 
- 
-
<big>'''Мотивация.'''</big><br>
 
-
Почему вообще стоит тратить время на изучение Python (и, более того, писать на нем научное ПО), когда и так есть С/C++, Fortran, MATLAB/Octave, с достаточным количеством соответствующего ПО, более того, обычно бесплатного?
 
- 
-
Прежде всего, низкоуровневые языки, такие как С, C++, Fortran, Assembler, не позволяют RAD (Rapid Application Development - быстрая разработка приложений). Приходится тратить много времени на компиляцию и линкование, а пользоваться отладчиком многие не умеют (особенно школьники и студенты). Кроме того, и С, и Fortran являются "Write Only Language" (особенно это актуально для Perl, где написанный код понимает только его автор, и то обычно не дольше 15 минут). Как правило, часто требуется также синхронизация (автоматическая или ручная) header-ов (h, hpp и тп) и source-файлов (с, cpp и тп). Очень часто встречаются runtime-ошибки "выход за границу массива", которые неопытным пользователям тяжело как находить, так и не допускать. На сайте mloss.org, где из уже более 170 пакетов относительно нового научно-технического направления (machine learning), нет ни одного (!) пакета, написанного на Fortran. Также, низкоуровневые языки не являются кросс-платформенными.
 
- 
-
Одной из составляющих RAD-свойств Python является отсутствие строгой типизации. Посмотрим например на следующую функцию:
 
- 
-
'''def myFunc(a, b):'''
 
-
:'''return 2*a + b'''
 
- 
-
Здесь нам не требуется указывать типы аргументов a и b, это может быть все, что только позволяет делать операции суммы и умножения на 2 без ошибок: это могут быть числа, число и матрица из numpy, строки, списки, матрицы одинаковой размерности, объекты какого-либо класса пользователя, с учетом того, что он определил операции сложения и умножения на число.
 
- 
-
Выучить Python несложно даже школьнику за пару недель, чего нельзя сказать про C/С++, Fortran, Ocaml, Erlang. По оценкам специалистов, разработка приложений на Python примерно в 2 раза быстрее, чем на Fortran, кроме того, написанные программы содержат намного меньше строк кода и более читабельные, что позволяет легче вносить изменения. А ведь это не только зарплаты программистов, но и аренда помещений, зарплата другим сотрудникам организаций, да и просто опережение конкурентов и своевременное выполнение сроков. Опыт моей работы в коммерческих фирмах свидетельствует, что очень часто между софтверной организацией и потенциальным заказчиком проходит следующий диалог: “Ваше ПО считает задачу за 30 секунд. За 5000$ мы можем написать ПО, которое будет считать ее за 3 секунды.” - “А нам не надо считать ее за 3 секунды, мы считаем ее раз в неделю, а через месяц мы купим новый процессор за 500$ и будем считать ее за 15 сек.”
 
- 
-
Рассмотрим теперь высокоуровневые языки.
 
-
MATLAB, MAPLE, MATCAD, Mathematica довольно дорогие. Конечно, сейчас у нас нетрудно приобрести нелицензионную версию, но:
 
-
* это не гарантирует, что такая ситуация будет продолжаться всегда
 
-
* кроме приличной цены, требуется еще и платить ~10% в год за обновления библиотек
 
-
* за границей (Китай, Бразилия и тп, особенно Европа, в которой более строго с нелицензионным ПО), где осознали всю негативную сторону зависимости от коммерческого ПО, начинается мощное движение о переходе на свободное ПО в образовании, муниципальных и других государственных структурах. Со временем это приведет к улучению качества СПО, так что миграция и программистов, и заказчиков, и пользователей только ускорится. Поэтому сделавшие ставку на эти коммерческое пакеты в будущем могут об этом пожалеть, т.к. качественно переписать тысячи строк кода (тем более, научного-технического), особенно если организация не распологает квалифицированными в обоих языках специалистами - задача непростая и технически, и финансово. <br>
 
-
Кстати, уже хотя бы поэтому тем программистам, у кого есть способности в точных науках, и стоит устраиваться на работу в научно-технические проекты, требующие высокой технической квалификации - меньше вероятность, что заказчик через какое-то время решит сменить разработчика всех этих сайтов, веб-приложений, GUI и т.п. на каких-нибуть школьников из Индии или Китая, способных (и согласных) выполнять ту же работу в 2-3 раза дешевле. А вы еще не задумывались, сколько в Индии или Китае таких школьников?
 
- 
-
Отметим также, что даже несомненный лидер из матпакетов - MATLAB - также обладает рядом недостатков. Это
 
-
*необходимость заканчивать каждую строку кода символом “;”
 
-
*отсутствие компилятора в машинный код
 
-
*неудобная стыковка с другими языками программирования (С, Fortran) посредством mex- функций
 
-
*неудобная обработка строк и ряда других типов, в том числе классов ООП
 
-
*передача аргументов копированием
 
-
*очень высокая цена (на сегодняшний день для фирмы, без скидок – 3000$ за MATLAB + цены за тулбоксы, например Optimization toolbox – 1562$, по прайс-листу softline.ru). Конечно же, как и почти любой другой уважающий себя продукт коммерческого ПО, MATLAB имеет грамотно расставленные паучьи сети, которые в Mathsoft обычно называют студенческими скидками
 
- 
-
В одном из сообщений MATLAB mail-list очень точно было отмечено, что Octave, SciLab и т.п. - это посредственная имплементация языка MATLAB, который, в свою очередь, посредственная реализация всего кроме матриц. Однако следует признать, что за последние 2 года некоторые недостатки MATLABа были исправлены.
 
- 
-
Что касается Octave и особенно SciLab, стоит также упомянуть проблемы с лицензией. Для Octave это GPL, содержащая copyleft (который запрещает использовать в лицензии своего продукта более сильные ограничения, чем ограничения используемых в нем библиотек с copyleft), для SciLab она вообще не является OSI-approved. Это очень сильно сдерживает их распространение и развитие, т.к. ряд организаций, выпускающих коммерческое ПО, не использует их, предпочитая продукты без copyleft (т.е. c такими лицензиями как BSD, MIT, Apache).
 
- 
-
Вообще, по наблюдениям автора, общая тенденция в развитии программного обеспечения (в т.ч. научного) такая: свободное ПО постепенно вытесняет коммерческое, тогда как свободное ПО без copyleft постепенно вытесняет содержащее copyleft (за счет того, что более охотно получает финансовую поддержку от софтверных организаций). Типичный пример – широко библиотеки [http://en.wikipedia.org/wiki/BLAS BLAS] и [http://en.wikipedia.org/wiki/LAPACK LAPACK]. Для ряда другого, более сложного научного ПО, например численная оптимизация, коммерческое ПО пока еще сохраняет свои позиции, но все же на мой взгляд это только вопрос времени - уже сейчас такие бесплатные решатели как IPOPT или DSDP показывают результаты на уровне коммерческого ПО стоимостью в тысячи долларов. Стоит отметить, что основной финансовой основой для развития научного СПО являются гранты от научных фондов, университетов, ряда организаций (IBM, Sun Microsystems и т.п.).
 
- 
-
Что касается использования других высокоуровневых языков в научно-технических целях, то недостатки у них следующие:
 
-
*OCAML – лицензия (GPL), сложность изучения
 
-
*Ruby – низкая скорость (в 2-4 раза меньше Python), популярность в основном благодаря ROR (беблиотека для разработки web-приложений), отсутствие множественного наследования, неопределенность в выборе наиболее быстрого подхода к написанию участков кода.
 
-
*Java – этот язык более низкого уровня чем Python, Ruby, MATLAB, поэтому разработка приложений занимает больше времени.
 
-
*Groovy, Cobra (не путать с CORBA) и другие клоны Python - в первую очередь небольшое кол-во написанного для них ПО. Не так уж сложно взять за основу какой-нибуть из существующих языков и исправить несколько его недостатков, но, как особенно любят говорить Java-программисты, язык без батареек сейчас никому не нужен. Кстати, одним из слоганов Python как раз и является “Batteries included” - т.е. к языку прилагается множество программных модулей.
 
-
*F# - уже сам факт того, что за ним стоит Microsoft, отпугивает многих пользователей (и, следовательно, уменьшает аудиторию и распространение языка). В половине F# FAQ автор неубедительно пытается откреститься от Microsoft и возможных лицензионных проблем. Кроме того, на мой взгляд, F# не полностью избавился от недостатков OCAML.
 
-
*R – лицензия (GPL), узкая основная направленность (стохастическая), не очень удобный синтаксис.
 
-
*Что же касается Pascal, по мнению автора, в школах и некоторых ВУЗах Украины его учат просто по инерции, никаких особых достоинств по сравнению с конкурентами у него давно уже нет.
 
- 
-
Кроме того, почти все упомянутые здесь языки (кроме разве что R), так же как и PHP, tcl (в которых к тому же приходится писать надоедливый знак "$", а в случае PHP - еще и ";"), имеют очень небольшое кол-во научного ПО (по сравнению с Python, включая ПО с Python-интерфейсами).
 
- 
- 
-
<big>'''Основные недостатки языка Python.'''</big><br>
 
-
Как и любой другой язык программирования, у Python конечно же есть и свои недостатки:
 
-
*Python изначально не предназначался для научно-технических задач, впрочем как и С/С++. Поэтому его программные конструкции в этом плане оставляют желать лучшего, так же как и скорость (что частично компенсируется numpy и удобством подключения кода других языков, см ниже).
 
-
*В отличие от MATLAB, Octave и ряда другого ПО, в Python нет стандартной библиотеки для разреженных матриц: кто-то пользуется scipy.sparse, кто-то PySparse, кто-то (как CVXOPT) использует свои библиотеки и/или BLAS, кто-то просто 3 столбца (координаты числа и его значение). По мнению автора, отказ разработчиков scipy включить разряженные библиотеки (их автору) в numpy был большой ошибкой, иначе сейчас это уже было бы единым стандартом.
 
-
*В настоящее время Python проходит болезненную миграцию с версии 2.5 до 2.6 и далее 3.0, где очень много изменений. Есть программы, которые позволяют делать это автоматически, но на numpy и scipy, которые имеют значительную часть кода C и Fortran, это не распространяется. Подробнее см [http://jarrodmillman.blogspot.com/2009/01/when-will-numpy-and-scipy-migrate-to.html здесь]. По-видимому, именно с этим связано локальное снижение популярности Python в [http://www.tiobe.com/content/paperinfo/tpci/index.html TIOBE index].
 
-
*Выделение блоков основано на индентации. Некоторые пользователи (в т.ч. я) это любят, остальные – наоборот, терпеть не могут.
 
- 
- 
-
<big>'''Основные дистрибутивы Python.'''</big><br>
 
- 
-
*'''[http://python.org CPython]''' – основная имплементация Python на языке С, выполненная автором Python Guido van Rossum. Он занимает более 90% от всех имплементаций.
 
- 
-
*[http://www.jython.org/ Jython] – имплементация Python на Java. Изначально на нее полагались большие ожидания, но ничего особенного она так и не показала, во многом из-за не очень большой скорости и несовместимостью со многими библиотеками, написанными под CPython.
 
-
*[http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython IronPython] – имплементация Python под Microsoft .NET. Имеет свой контингент пользователей, но в первую очередь Microsoft занята продвижением конкурирующегос Python языка С#.
 
-
*[http://en.wikipedia.org/wiki/PyPy PyPy] (PythonPython) – эксперементальная имплементация, выполнявшаяся несколько лет коллективом, спонсированным одним из грантов FP7. Вряд ли у него есть будущее (из-за несовместимости с библиотеками CPython), но его наработки (динамическая трансляция некоторых участков кода в С и их компиляция “на лету”) возможно, в будущем будут использованы в CPython.
 
-
*[http://pymite.python-hosting.com/ PyMite] – имплементация Python для ряда микропроцессоров (в первую очередь Atmel).
 
- 
- 
-
<big>'''Основные научные библиотеки Python.'''</big><br>
 
-
Прежде всего, следует отметить numpy (numeric python, numpy.scipy.org) и scipy (scientific python, scipy.org), см также их страницы на wikipedia.org : [http://en.wikipedia.org/wiki/Numpy NumPy], [http://en.wikipedia.org/wiki/Scipy SciPy]. Они (и их списки почтовых рассылок – numpy-user, scipy-user, scipy-dev, см http://scipy.org/Mailing_Lists) являются “точками сбора” всех пользователей Python в научно-технических целях (впрочем, стоит отметить также SAGE google groups).
 
-
* NumPy – это низкоуровневая библиотека, написанная в основном на С и Фортран (в основном матричные операции), опирается на код BLAS+ATLAS, LAPACK. См также “NumPy для пользователей MATLAB”: http://www.scipy.org/NumPy_for_Matlab_Users. Тем, у кого проблемы с английским, могу порекомендовать вставить этот html-адрес в translate.google.com или аналогичный сервис.
 
-
* SciPy – численное интегрирование, сплайны, оптимизация, решения систем диф. уравнений и т.п. Впрочем, иногда отдельные специализированные пакеты обладают бОльшим удобством, функциональностью и т.п (например, OpenOpt vs scipy.optimize).
 
-
* В качестве аналога MATLAB plot tool наиболее распространен matplotlib.
 
- 
-
Рекомендуется посмотреть на следующие списки научного ПО для Python:
 
-
*http://scipy.org/Topical_Software
 
-
*http://pypi.python.org/pypi?:action=browse&show=all&c=385
 
- 
-
А также на голосование об использовании научных пакетов
 
-
*http://www.doodle.com/participation.html?pollId=8mwqx63qecyem2np
 
- 
- 
-
<big>'''Основные научные дистрибутивы Python.'''</big><br>
 
-
Можно вручную устанавливать Python и требуемые библиотеки, а можно вспользоваться одним из дистрибутивов, ориентированных на научное использование.
 
- 
-
* [http://www.enthought.com/products/epd.php EPD] (Enthought Python Distribution) – содержит numpy, scipy, matplotlib и многое другое, установка – практически в несколько кликов мышью. Недостатки: лицензия – free for non-commercial; платформы – только коммерческие Windows и RHEL, а прилагаемые к EPD IDE (IDLE и Scite) по функциональности могут конкурировать разве что с Microsoft notepad. Enthought является спонсором numpy/scipy.
 
- 
-
* [http://sagemath.org SAGE] – "свободная конкурентноспособная альтернатива MATLAB, MAPLE, MATCAD, Mathematica". В принципе, он соответствует этой характеристике, однако пользоваться им я бы не рекомендовал, в т.ч. даже в образовательных целях. Во-первых, для Windows требуется устанавливать VMWare. Во-вторых, сам SAGE занимает ~800 MB, компиляция занимает несколько часов. Средой разработки обычно выступает Mozilla Firefox с минимумом функциональности, рекомендуется разве что фанатам MATLAB Cells. Из плюсов следует отметить встроенные удобные интерфейсы к MATLAB, Octave, R и т.п.
 
- 
-
* [http://pythonxy.com PythonXY] – дистрибутив, основанный на Eclipse (широкораспространенная бесплатная кроссплатформенная IDE, имеет плагины к Python). Дополнительные модули можно устанавливать как exe-файлы (также PythonXY доступен для Debian-based ОС Linux).
 
- 
-
Воспользоваться хотя бы одним из этих дистрибутивов стоит уже хотя бы для того, чтобы избежать потенциальных проблем при установке numpy, scipy, matplotlib и т.п. (особенно это актуально, если нельзя воспользоваться apt-get, yum и другими утилитами для автоматического скачивания и установки в Linux). После этого можно установить предпочитаемое Python IDE (если содержащиеся в дистрибутиве по каким-то причинам не устраивают).
 
- 
- 
-
<big>'''Основные среды разработки для Python.'''</big><br>
 
-
Прежде всего я рекомендовал бы обратить внимание на Eric, NetBeans, Eclipse, SPE.
 
- 
-
Из извесных мне IDE только [http://eric-ide.python-projects.org/ Eric] имеет Python Command Shell, аналогичную MATLAB Command Shell, поэтому именно его я бы рекомендовал в первую очередь (коммерческая Wing IDE имеет сразу 2 окна, из них одно для отладчика, по моему опыту это неудобно). Стоит отметить, что единственному разработчику Eric (Detlev Offenbach) удается поддерживать его функциональность и (немецкое) качество на уровне NetBeans, Eclipse (которые пишутся командами разработчиков при большой финансовой поддержке ряда корпораций), так же как и коммерческих KOMODO, Wing IDE. Кроме того, он потребляет всего 41 МБ RAM (Eclipse – 137, NetBeans 6.1/6.5 – 229/412). Время загрузки, сек – 4 – 21 – 16/25. Данные приведены для AMD Athlon 3800+ X2, Linux KUBUNTU. Один из доступных плагинов Eric проводит русификацию этого IDE.
 
- 
-
Недостатком Eric являются проблемы с установкой, особенно с его зависимостями (лучше всего через apt-get, yum и другие Linux update channels установить все зависимости, а потом поставить сверху последнюю версию Eric, на вопрос о Qt data directory обычно помогает просто Enter. Если вместе с зависимостями вы установили и сам Eric, проверьте, какую версию вы запускаете (Help->About Eric) и в случае старой версии измените путь на новую). Очень рекомендуется устанавливать версию не старее 4.3.0 (2009-02-08), т.к. там наконец-то были исправлены пара недостатков (по просьбе автора статьи) – прокрутка файловых вкладок доступна мышью, окно отладчика сразу переключается в locals; еще один недостаток- отсутствие возможности выполнения команд из текущей функции стека – Detlev пообещал исправить в 4.4.0, как и добавление визуальной системы ошибок и предупреждений, аналогичной MATLAB и NetBeans. Установка плагинов в Eric не очень удобна: Plugins->Plugin Repository->update;download;install; Plugins->Plugin Infos->activate, autoactivate. Прежде всего стоит установить pylint. Это менее удобно, чем в NetBeans, но более удобно чем в Eclipse, где к тому же установка плагинов почему-то выполняется через меню Help.
 
- 
-
После установки Eric рекомендуется сразу же произвести начальную настройку - удалить подсветку текущего слова (если это еще не убрано в новой версии) и изменить цвет для подсветки результатов поиска с красного на какой-то получше, выставить типы файлов по умолчанию для сохранить/загрузить "py" (Python), удалить или переставить окно project-viewer, чтобы оно не мельтешило при включении/отключении отладчика, удалить с панели ненужные кнопки (например, для плагинов) и раздвинуть оставшиеся, чтобы была видна кнопка сохранения файлов. Впрочем, система hot-keys в Eric достаточно удобная, поэтому проще пользоваться ей, а не панелью.<br>
 
-
Посмотреть на snapshot настроенного таким образом Eric можно [http://files.openopt.org/pics/snapshots/EricSnapshot.jpeg здесь].
 
- 
-
Все 3 рассмотренные среды разработки имеют conditional breakpoints, интеграцию с версионными системами (cvs, svn и тд) и практически полный спектр стандартных услуг. Полный список Python IDEs [http://wiki.python.org/moin/IntegratedDevelopmentEnvironments здесь].
 
- 
- 
-
<big>'''Использование кода других языков в Python.'''</big><br>
 
-
Для подключения кода других языков в первую очередь рекомендуется:
 
-
*Fortran – f2py (включен в numpy)
 
-
*C/C++ - Python C API, SWIG, Pyrex, ctypes, cython. Последние два включены в numpy. Прежде всего стоит испольовать cython (Pyrex – его предшественник).
 
-
*R – RPy
 
-
*MATLAB – Mlabwrap. См также [http://comments.gmane.org/gmane.comp.python.scientific.user/19241 дискуссию] об автоматической трансляции m-файлов в Python
 
-
* Assembler - CorePy
 
-
В NASA и ряде других организаций обычно практикуется следующий подход:
 
-
* все, что можно, пишется на Python+numpy (конечно, используются и scipy, и другие библиотеки)
 
-
* то, что требует большей скорости, пишется на Pyrex (сейчас уже Cython)
 
-
* то, что требует еще большей скорости, пишется на C/С++, Fortran (и подключается через Cython. f2py)
 
-
* то, что требует максимальной скорости, пишется на Assembler.
 
-
Если есть потребность в миграции проекта с С/С++/Fortran на Python, это обычно проходит "островным" способом - по очереди переписываются отдельные функции.
 
- 
- 
-
<big>'''Заключение.'''</big><br>
 
- 
-
У нас в продаже имеется достаточно переводной литературы по Python, к сожалению, литературы по NumPy (в переводе), насколько мне известно, пока нет, но для начального использования можно посмотреть несложные примеры из [http://docs.scipy.org/ англоязычной] документации. Как отмечают некоторые подписчики mail list (и мои собственные наблюдения – 3 года на MATLAB mail list и 2 года на numpy/scipy mail lists), на форумах СПО отвечают более подробно и охотно, чем на коммерческих – и действительно, зачем кому-то помогать Mathsoft зарабатывать деньги? И зачем авторам MATLAB оказывать бесплатную поддержку пользователям, когда они зарабатывают деньги на платной?
 
- 
-
В странах СНГ все наступает с запаздыванием (по сравнению с Западом), по-видимому, это справедливо и для использования Python в научно-технических целях. Отсутствие строгого контроля за лицензионностью ПО замедляет внедрение СПО. Автор обращался в МОН с аналогичной аргументацией перевода образовательного процесса с MATLAB на Python, но, конечно же, безрезультатно – да и что ждать от министерства, у которого на сайте приводится адрес сотрудника, занимающегося распространением MATLAB и получающего с этого свои проценты.
 
- 
-
Консультации по Python на русском/украинском языках можно получить на украинском сайте Python-программистов http://python.su. К сожалению, владельцы сайта отказались организовать подфорум - точку сбора (meetpoint) украинских пользователей Python в научно-технических целях, где (кроме тех. поддержки) софтверные организации могли бы набирать людей под свои проекты (возможно, с предварительным обучением). Они аргументировали это небольшим количеством соответствующих пользователей.<br>
 
-
Если нет проблем с английским языком, то задавать вопросы по Python лучше [http://groups.google.com/group/comp.lang.python здесь], скорее всего ответят быстрее и более квалифицированные специалисты. Стоит также отметить [http://groups.google.com/group/comp.lang.python.announce/ python-announce google group], где публикуются важные события (в основном выход новых релизов различных библиотек). Выход релизов научно-технических библиотек на Python (или, по крайней мере, с Python-API) обычно публикуется на scipy-user mail list.
 
- 
-
Возможно, в будущем Python (так же как и С, Fortran, MATLAB) будет вытеснен Fortress или какими-то другими языками, однако сейчас его использование в научно-технических целях находится на подъеме (прежде всего имеются в виду страны Запада), о чем свидетельствует уже хотя бы резкое увеличение за последние 2 года трафика numpy-user и scipy-user mail lists. Однако этот язык наверняка будет высокоуровневым и производить передачу аргументов по ссылке, поэтому переписывать на него ПО проще всего именно с Python (по моему опыту миграции с MATLAB на Python двумя самыми большими проблемами были передача аргументов копированием и индексация массивов с единицы, в случае миграции Python-Fortress эти проблемы отсутствуют). О перспективном языке Fortress, которого его создатели из Sun Microsystems называют наследником Fortran, читайте в следующей статье автора.
 
- 
- 
-
<big>'''См также: '''</big><br>
 
- 
-
*другие статьи по использованию Python в научных целях:
 
-
** http://wiki.python.org/moin/PythonAdvocacyInScientificComputation
 
-
** http://www.scientificcomputing.com/High-Performance-Development-with-Python.aspx
 
-
* [http://www.python.org/dev/peps/ PEPs] (Python Enhancement Proposals) - список предложений по изменению языка. Часть принята, часть отклонена, часть в процессе обсуждения, в т.ч. возможных альтернатив.
 
- 
- 
-
\\ 2009-02-11, by Dmitrey, и.о. м.н.с. отдела оптимизации ИК НАН Украины,
 
-
http://openopt.org/Dmitrey.
 

Revision as of 09:02, 11 February 2009

Personal tools