Автор Гілка: OpenOpt: Українське ВПЗ для чисельної оптимізації  (Прочитано 2293 раз)

Відсутній Dmitrey15

  • Дописувач
  • **
  • дописів: 68
  • Карма: +0/-0
Вийшла чергова версія (0.19) вільного (ліцензія BSD) українського ПЗ для чисельної оптимізації OpenOpt, що розробляється співробітниками інституту кібернетики НАН України та написана мовою програмування Python. Він має декілька власних вирішувачів (solvers) та Python-інтерфейси до багатьох інших (також вільних), деякі з котрих написано на С, С++, Fortran.

На вiдміну від С та Fortran, Python дозволяє RAD (Rapid application development).

Комерційні аналоги коштують тисячі та навіть десятки тисяч доларів, окрім того, приблизно 10% доводиться витрачати на оновлення програмних бібліотек щорічно.

Докладніше про OpenOpt:
Інше наукове ВПЗ мовою Python:
« Змінено: 2008-09-15 22:11:21 від lvm »

Відсутній raven

  • Новачок
  • *
  • дописів: 0
  • Карма: +0/-0
  • linux kettle
Славно. Я, насправді, не є спеціаліст у цій конкретній галузі, але не може не зацікавити питання, як у нього з... е-е-е... перформансом у порівнянні з аналогами на C чи Fortran? Подібні виміри проводились? Справа в тому, що, на мій погляд, це дещо виходить за межі звичного застосування Python.

Відсутній Dmitrey15

  • Дописувач
  • **
  • дописів: 68
  • Карма: +0/-0
Славно. Я, насправді, не є спеціаліст у цій конкретній галузі, але не може не зацікавити питання, як у нього з... е-е-е... перформансом у порівнянні з аналогами на C чи Fortran? Подібні виміри проводились? Справа в тому, що, на мій погляд, це дещо виходить за межі звичного застосування Python.

По-перше, застосування Python у  науковому ПЗ є достатньо популярним (якщо подивитися на кількість наукових Python-проектів з наведених лінків)

По-друге, майже усі низько-рівневі операції, якто матричні помноження, розв'язування систем лінійних рівнянь і таке інше, виконуються за допомогою бібліотеки numpy - вільного ПЗ, що дозволяє звертатися з Python до скомпільованого коду С та ФОРТРАН що міститься у цій бібліотеці.
Окрім того, якщо задача належить до матричного класу (тобто нема нелінійних функцій), то OpenOpt лише передає ці матриці з Python до інших матричних солверів, як правило написаних на С та ФОРТРАН, і отримує матрицю/матриці назад, тому погіршення перформансу може бути зумовлене лише часом для формування початкових даних для солвера, але воно як правило незначне у порівнянні з часом розвєязування, а час програміста для відповідного коду набагато меньший ніж С або ФОРТРАН (що обумовлено визначними RAD-властивостями Pythonу)

По-трете, якщо задача належить до класу нелінійних, то як правило 90-99% часу на її розв'язування витрачається солвером на матричні операції (що обробляється numpy, дивись вище) та на виклики цих нелінійних функцій. Якщо декілька з них costly (потребують багато часу) то їх можна переписати на С або ФОРТРАН, що іноді і роблять. (один з багатоьх відомих мені прикладів)

Також можу додати, що багато разів зустрічав задачі, де мій Python-written солвер ralg вирішував швидше та краще ніж усі 5 інших (які мають openopt-інтерфейси) написаних на С або ФОРТРАН. Це набагато більше залежить від алгоритмів що лежать у основі солверів, також має велике значення єпіграф з цієї сторінки.
« Змінено: 2008-09-16 09:59:00 від Dmitrey15 »

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3641
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Славно. Я, насправді, не є спеціаліст у цій конкретній галузі, але не може не зацікавити питання, як у нього з... е-е-е... перформансом у порівнянні з аналогами на C чи Fortran? Подібні виміри проводились? Справа в тому, що, на мій погляд, це дещо виходить за межі звичного застосування Python.

По-перше, застосування Python у  науковому ПЗ є достатньо популярним (якщо подивитися на кількість наукових Python-проектів з наведених лінків)

По-друге, майже усі низько-рівневі операції, якто матричні помноження, розв'язування систем лінійних рівнянь і таке інше, виконуються за допомогою бібліотеки numpy - вільного ПЗ, що дозволяє звертатися з Python до скомпільованого коду С та ФОРТРАН що міститься у цій бібліотеці.
Окрім того, якщо задача належить до матричного класу (тобто нема нелінійних функцій), то OpenOpt лише передає ці матриці з Python до інших матричних солверів, як правило написаних на С та ФОРТРАН, і отримує матрицю/матриці назад, тому погіршення перформансу може бути зумовлене лише часом для формування початкових даних для солвера, але воно як правило незначне у порівнянні з часом розвєязування, а час програміста для відповідного коду набагато меньший ніж С або ФОРТРАН (що обумовлено визначними RAD-властивостями Pythonу)

По-трете, якщо задача належить до класу нелінійних, то як правило 90-99% часу на її розв'язування витрачається солвером на матричні операції (що обробляється numpy, дивись вище) та на виклики цих нелінійних функцій. Якщо декілька з них costly (потребують багато часу) то їх можна переписати на С або ФОРТРАН, що іноді і роблять. (один з багатоьх відомих мені прикладів)

Також можу додати, що багато разів зустрічав задачі, де мій Python-written солвер ralg вирішував швидше та краще ніж усі 5 інших (які мають openopt-інтерфейси) написаних на С або ФОРТРАН. Це набагато більше залежить від алгоритмів що лежать у основі солверів, також має велике значення єпіграф з цієї сторінки.
Тобто Ви не можете надати таблицю з конкретними прикладами і часом розв’язання Вашою програмою і програмами на C, типу цього?

Приклади, наведені у пакеті розв’язувача, знову дають різні результати для різних бібліотек SciPy?

І ще одне: хто на Вашу думку писатиме бібліотеки для RAD-програмування на C і Fortran, якщо всі науковці писатимуть до них оболонки на Python?
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній Dmitrey15

  • Дописувач
  • **
  • дописів: 68
  • Карма: +0/-0
Тобто Ви не можете надати таблицю з конкретними прикладами і часом розв’язання Вашою програмою і програмами на C, типу цього?
Я-то можу, якщо витратити достатньо часу, але я не бачу сенсу, бо це не дуже доречно - самому підбирати задачі для порівняння, бо завжди є спокуса навести ті задачі де мої солвери працюють краще а конкуренти погірше, а усі інші відсунути кудись подалі. Тому цим як правило займаються сторонні особи, наприклад Hans Mittelmann. По-друге, наведений вами лінк демонструє порівняння швидкості С та python, що сам написан на С, тому звичайно швидкість у С набагато більша. Але майже усі хто пише наукове ПЗ на python користуються numpy, тому різниця у швидкості набагато меньша.
Цитата
Приклади, наведені у пакеті розв’язувача, знову дають різні результати для різних бібліотек SciPy?
Мабуть так, мене це не цікавить, бо то були тисячні долі відсотків, можливо зумовлені різними флагами при компілюванні BLAS.
Цитата
І ще одне: хто на Вашу думку писатиме бібліотеки для RAD-програмування на C і Fortran, якщо всі науковці писатимуть до них оболонки на Python?
Вибачайте, на безглузді запитання не відповідаю.

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3641
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Гаразд. Сувора мова фактів:
lsp_1.py
(1789.20055096-1787.97555551)/1787.97555551~0.00069 (0.07%) (Це ближче до десятих долей відсотка)

lsp_1.py
(13.4691644145-1.35828942657)/1.35828942657~9.18 (918%) (No comments)

Майже в усіх прикладах відносна похибка коливається від тисячних долей відсотків до десятих або навіть цілих відсотків. З точки зору обчислювальної математики, навіть за точності float, а не double, обґрунтування практичних рішень на основі таких програмних комплексів виглядає сумнівним.

І ще: не підкажете, де OpenOpt у цій таблиці (для Ъ: всі (sic!) розв’язувачі з таблиці написано на C)?

Дискутувати більше не буду.
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній Dmitrey15

  • Дописувач
  • **
  • дописів: 68
  • Карма: +0/-0
Гаразд. Сувора мова фактів:
lsp_1.py
(1789.20055096-1787.97555551)/1787.97555551~0.00069 (0.07%) (Це ближче до десятих долей відсотка)

lsp_1.py
(13.4691644145-1.35828942657)/1.35828942657~9.18 (918%) (No comments)

Ви 2 рази наводите lsp_1.py. Я не знаю шо там у вас, але у мене усе гаразд: 1.35828942657
Цитата
Майже в усіх прикладах відносна похибка коливається від тисячних долей відсотків до десятих або навіть цілих відсотків. З точки зору обчислювальної математики, навіть за точності float, а не double, обґрунтування практичних рішень на основі таких програмних комплексів виглядає сумнівним.
Якщо ви мали на увазі llsp_1.py, то там я порівнював з початковим значенням а не 2 кінцевих. Але і ті 0.07% що у вас є незначними, якщо ви щось розумієте у типових задачах linear least squares, що використовуються (як правило) для data fit.
Цитата
І ще: не підкажете, де OpenOpt у цій таблиці (для Ъ: всі (sic!) розв’язувачі з таблиці написано на C)?
Не підкажу, бо там openoptа нема й не було. Я навів цю сторінку лише для прикладу.
Цитата
Дискутувати більше не буду.
Та мені від вас і не треба, невже у вас були якісь сумніви щодо цього?

Відсутній raven

  • Новачок
  • *
  • дописів: 0
  • Карма: +0/-0
  • linux kettle
М-м-м... пане Dmitrey15, не сприймайте за образу, але ви маєте відношення до розробки сабжу? Просто ряд ваших висловлювань (поки не буду їх цитувати, це зовсім інша тема для дискусії) наводить на думку, що ви "просто помістили об'яву" і самі не пишете. Може, це просто не до вас треба з цим питанням звертатись.

Відсутній Dmitrey15

  • Дописувач
  • **
  • дописів: 68
  • Карма: +0/-0
М-м-м... пане Dmitrey15, не сприймайте за образу, але ви маєте відношення до розробки сабжу? Просто ряд ваших висловлювань (поки не буду їх цитувати, це зовсім інша тема для дискусії) наводить на думку, що ви "просто помістили об'яву" і самі не пишете. Може, це просто не до вас треба з цим питанням звертатись.
Я не зовсім зрозумів, що ви тут маєте на увазі. Якщо розробку OpenOpt, то маю відношення, бо майже весь код писав я, як і підтримку його сайту і блогу.

Відсутній Loof

  • Дописувач
  • **
  • дописів: 77
  • Карма: +0/-0
  • Що новенького?
Хороша і дуже потрібна робота, Дмитре!

Пане yurchor, мені здається, Ви не дуже сильні в програмуванні, а особливо в розділенні задачі на логіку вирішення (високий рівень) і обчислення на низькому рівні (чим займається швидка бібліотека numpy). А якщо дуже бажаєте мати порівняльні графіки, таблиці і т.д., то можете провести таке дослідження самі. Цим можна було б допомогти автору, бо додаткова реальна інформація про швидкодію системи ніколи не зашкодить.

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
yurchor,
ось ще приклад уживання зв’язки python+C для обчислень: https://wiki.fysik.dtu.dk/gpaw/index.html
Звісно, основні функції, для яких час виконання є критичним, написані на С, решта — на пайтоні. З паралелизацією теж там все гаразд.


Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"