Sensitivity Analysis for LibreOffice

Автор tagezi, 29 июня 2016, 03:45

0 Пользователи и 1 гость просматривают эту тему.

tagezi

В данный момент оно ещё сырое, но работает, хотя и как макрос в документе. В принципе, расчеты делать можно.
Если кому нужно, забрать можно из моего хранилища.
Отдаю, как и принято, по 2 лицензиям.
Дорабатывать буду, так как интересно и необходимо, но не быстро. В виде модуля будет, но не сегодня.

Для чего используется:
ЦитироватьАнализ чувствительности (Sensitivity Analysis) - это способ оценки инвестиционного проекта, которым может быль любое инвестирование средств (акции, покупка недвижимости, разработка проекта). Основой анализа чувствительности является экономико-математическая модель денежных потоков.
Модель денежных потоков - это все задействованные потоки, как входящие платежи, так и исходящие, связанные между собой при помощи математического аппарата и генерирующая экономические показатели эффективности проекта. Примером может быть расчет NPV.
Кроме NPV могут считать другие показатели, на которые инвестор может положиться по своему опыту. На деле их, только официально признанных (о которых я знаю) порядка десятка, но в расширении сделал только 4 (NPV, IRR, ROI, DPBP) самых распространенных, и оставил один на выбор (хотя на выбор можно задать и все пять, но можно запутаться).
Анализ чувствительности заключается в поочередном изменении факторов влияющих на проект и фиксировании изменений показателя.
Обычно значения показателей строятся в таблицу, на основе которой делается диаграмма Паук. В редких случаях также делают диаграмму Торнадо, но это в очень редких случаях.
Сценарный анализ, пока не разрабатывал, во первых, используется значительно реже, во вторых, нужно доделать этот до кондиции.
Пример математической модели денежных потоков есть в репазитории на листе Cash flow. В томже файле есть пример расчета показателей, лист Interim calculation. В том же файле есть пример таблицы с факторами, на листе Sensitivity. НА листе Project cost, пример расчета стоимости проекта производства одного программного модуля (стоимость разработки программы под заказ)

Дополнительная литература:
ЦитироватьИнвестиционный анализ
Анализ чувствительности

Что в наборе:

  • Файл модель (thesis project assessment.ods). В нём пример с простой экономико-математической моделью. Рассчитываются 4 показателя по пяти факторам, период год, если нужно больше переделывайте, у меня она для тестов.
  • Файл предварительных настроек (thesis project assessment.conf), от туда заполняется форма для того, чтобы вы могли представить что куда пихать. После изменения настроек,все настройки должны сохранится в нём, и будут восстанавливаться ваши. Файлы thesis project assessment.ods и thesis project assessment.conf пока должны лежать в одной директории
  • Файл с кодом (sa4lo.bas). В принципе, для работы не нужен, но мало ли вам пригодиться.
  • Экспортированные формы (SensitivityAnalysis.xdl, Address.xdl), ну, мало ли тоже нужны.
  • 2 Лицензии GPLv3 и MPLv2, если забыли чего там написано.

Что работает:

  • Выбор экономических показателей,
  • Выбор диапазона факторов,
  • Строит таблички и диаграммы,
  • При правильно построенной модели, само всё считает.

Что планируется доделать в первую очередь:

  • Переделать определение изменений в форме, оно фактически не работает;
  • Переделать вывод таблицы и диаграммы. Сейчас оно статичное, нужно чтобы координаты считались от ячеек, будет аккуратнее. Ну и нужно индийский код убрать :) ;
  • Переделать поля в форме для названий параметров, всётаки правильно будет если  название можно будет выбирать для любого фактора;
  • Сделать дополнительную проверку библиотеки Тул, ну мало ли её удалят когда-нибудь.

ЗЫ: Чтобы было удобнее пользоваться, можно сделать кнопку на панели и тыкать в неё.
В модуль не собирал, так как считаю это ещё преальфой... и что-то оно у меня не работает в виде модуля... пока.

Предложения принимаются ;)
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

kompilainenn

первое предложение: напиши в преамбуле что это такое вообще и для чего может использоваться, только напиши понятными словами
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

rami

Цитата: tagezi от 29 июня 2016, 01:45Ну и нужно индийский код убрать :)
А что тогда останется ???

tagezi

Цитата: kompilainenn от 29 июня 2016, 06:04напиши в преамбуле что это такое вообще и для чего может использоваться
Понятные слова?

Цитата: rami от 29 июня 2016, 06:48А что тогда останется
Ну, всё равно нужно убирать быдлокод, а то там половина копипаст, а вторая запись макроса..и только 80% произведение искусства :)) И ваще, работает тормазнуто, хрен разберёшься, да и не красиво просто... местами даже не совсем логично.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Цитата: tagezi от 29 июня 2016, 12:33Ну, всё равно нужно убирать быдлокод, а то там половина копипаст, а вторая запись макроса..и только 80% произведение искусства
Не скромничай, там 146% шедевр древнеиндийского искуства ;D
Цитата: tagezi от 29 июня 2016, 12:33И ваще, работает тормазнуто...
Это потому что обрабатываешь каждую ячейку, да ещё и через диспетчер.
Цитата: tagezi от 29 июня 2016, 12:33..хрен разберёшься, да и не красиво просто... местами даже не совсем логично.
Главное чтобы враг  O0 не разобрал, а мы как-нибудь осилим 8-)

Начну с простого: Private sSheet , sStartCell, sFieldName, sFileName As String
Private bCloseFloodField, bStartAnalysis, bStartFloodField As Boolean

В первой строке ты объявляешь первые три переменные как Variant (по умолчанию), а четвёртую как String, во второй строке первые две переменные как Variant, а третья как Boolean — ты это хотел? Каждой переменной надо назначать тип. Но я типы Variant и Object не назначаю, достаточно, что будет по умолчанию Variant.

tagezi

Цитата: rami от 29 июня 2016, 12:22Начну с простого:
Код:

Private sSheet , sStartCell, sFieldName, sFileName As String
Private bCloseFloodField, bStartAnalysis, bStartFloodField As Boolean

В первой строке ты объявляешь первые три переменные как Variant (по умолчанию), а четвёртую как String, во второй строке первые две переменные как Variant, а третья как Boolean — ты это хотел? Каждой переменной надо назначать тип. Но я типы Variant и Object не назначаю, достаточно, что будет по умолчанию Variant.
Спасибо. Хм, что-то я был увернет, что можно простым перечислением задать... видимо из других языков программирования всосало в вакуум между ушами :)
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Идём дальше:
Открываем диалог и видим поля "для выбора" диапазона факторов — у нас есть "шикарный и ничем не ограниченный" выбор из одного (одного!!! Карл!) варианта диапазона факторов. Почему бы не сделать для каждого фактора своё поле ввода? Так будет понятно у каких факторов какие параметры.

То же самое и с показателями — выбора никакого реально нет, поля выбора не нужны. Для каждого показателя сделать чекбокс и завязать на определённую ячейку, больше ничего не нужно.

Должно быть так: вызываем диалог, выставляем "птички" на показателях и жмём "ОК". Всё. Готово.

tagezi

Цитата: rami от 29 июня 2016, 13:28Открываем диалог и видим поля "для выбора" диапазона факторов — у нас есть "шикарный и ничем не ограниченный" выбор из одного (одного!!! Карл!) варианта диапазона факторов. Почему бы не сделать для каждого фактора своё поле ввода? Так будет понятно у каких факторов какие параметры.
Да, можно, но тогда нужно делать интерактивную форму, в которой изначально будет 1-2 фактора, а когда пользователь их заполняет, будет появляться третий.
Понятно, что чаще всего используют 5-6 факторов, но в прошлом году для электростанции считали, кажется, 9. Есть более сложные проекты...
Если делать для каждого фактора отдельное поле, для него нужно также делать отдельное поле для наименования. Сейчас всё считается просто, с лева названия, скопировали диапазон и забили. Нормальный человек всё равно сделает таблицу, чтобы было проще воспринимать.


Цитата: rami от 29 июня 2016, 13:28То же самое и с показателями — выбора никакого реально нет, поля выбора не нужны. Для каждого показателя сделать чекбокс и завязать на определенную ячейку, больше ничего не нужно.
Здесь тоже самое... нельзя запретить выбор собственный во всех 5 вариантах. Пользователю могут быть вообще не интересны чисто экономические показатели, он например хочет средняя цена мощности (Average capacity price), совокупная стоимость владения (Total Cost of Ownership), или анализ выгодности затрат (Cost-Benefits Analysis). И всё, куда пихать галки?
Да, обычно, особо в России использую максимум 4 предустановленных мной показателей (обычно 2, если быть честным :)). Но например Microsoft REJ рекомендует рассчитывать также экономическая добавленная стоимость (economic value added).

Одной из долгосрочных целей, это добавление локализации этого всего 146%-ого индийского шедевра.
И создание интерактивного диалога для ввода данных. Но думаю нужно закончить его сейчас, потому что, как показывает практика, долгосрочные планы не часто осуществляются.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Я имел ввиду что-то вроде этого (см. картинку), устанавливаем показатели, вводим коэффициенты для факторов.

Имена параметров и факторов можно не забивать вручную, а привязать к определённым ячейкам документа.

tagezi

Цитата: rami от 30 июня 2016, 08:28
Я имел ввиду что-то вроде этого (см. картинку), устанавливаем показатели, вводим коэффициенты для факторов.

Имена параметров и факторов можно не забивать вручную, а привязать к определённым ячейкам документа.
Так, я понял тебя. Ты также, как моя комиссия на дипломе, вообще не понимаешь что происходит. :) То что ты показываешь на картинке, я начал с этого 2 года назад. И да, по большому счету для электронной таблицы диалоговое окно в этом случае избыточно вообще. Давай попробуем с самого начала.
Для меня сам расчет показателей является "Черным ящиком". Я действительно не могу предсказать ни используемые показатели, ни используемые факторы, ни количество всего этого, ни куда факторы подвязаны. Естественно, я не могу предсказать как человек хочет их назвать. И естественно я не могу представить сам расчет используемый в конкретной модели. Да, с теми моделями, с которыми я работал, я знаю расчеты, но... это модели с которыми я работал.
Черный ящик - это система внутреннее устройство и механизм работы которой очень сложны, неизвестны или неважны в рамках данной задачи.
То есть, для меня модель выглядит как "Ты туда колбасу, а оттуда баран" (с).
Вот смотри, я прикладываю 3 модели. Первую не могу отдать полностью, там не всё понятно с лицензией, но так как цифры в общем доступе, то скриншоты можно.
2 остальные, это сильно упрощенная модель из нефтяники, вторая сильно упрощенная модель разработки программного продукта. Сильно упрощенная, потому что на практике они тоже гигантские получаются.
Даже если мы условимся с тем, что все показатели эффективности будут вынесены на отдельный лист, вернее конечный результат их расчета, чтобы мы могли предсказать место, то всё равно, для разных проектов они будут разные и их количество будет разное. Но самое главное количество факторов разное. Именно по этому нужно указывать их адрес. Поля для названий всего этого нужны для того, чтобы можно было сразу сформировать "правильные " таблицы и "правильные " диаграммы.

Твой вариант, подходит для конкретной модели, или конкретного типа моделей, если мы условимся что все модели будут иметь определённый вид.
На практике, такое возможно только в пределах одной конкретной организации, считающих только один вид деятельности.

ЗЫ: пока писал тебе ответ, понял что не правильно пересоздаю листы :)
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

JohnSUN

Кстати, о дипломе! Давно о нём не вспоминали - так вот, кстати о нём...
Чем там дело кончилось-то?
Смотрим на эту фразу
Цитата: tagezi от 30 июня 2016, 10:59
Ты также, как моя комиссия на дипломе, вообще не понимаешь что происходит. :)
Делаем вывод: тупые придирки от тупых придурков вылились в оценку бешеной работы в четыре балла. Апелляцию подавать не собираешься из соображений "Да пошли они все..." Так что ли?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

tagezi

Цитата: JohnSUN от 30 июня 2016, 08:24Делаем вывод: тупые придирки от тупых придурков вылились в оценку бешеной работы в четыре балла. Апелляцию подавать не собираешься из соображений "Да пошли они все..." Так что ли?
Да, я не правильно оценил ситуацию. Думал говорю с умными людьми, которые знают базовый функционал популярных табличных процессоров, представляют что такое модель инвестиционного проекта, и что такое анализ чувствительности (в конце концов он рекомендован Министерством финансов РФ), и делал презентацию проекта, а не лекцию про "как вставлять формулы в ячейку".
Ну и в итоге, да, 4 из жалости к среднему балу.
Нет, придраться было к чему, косяков в дипломе навалом: код сырой, аргументация местами страдает, где-то излишне сложный язык, где-то стандарты не соблюдены... но оценка снижена не за них, а за то что мало картинок в презентации было мало и я не тараторил, не понимая вообще о чем говорю, как большинство защищавшихся.
И да, апелляцию я подавать не буду.

Цитата: JohnSUN от 30 июня 2016, 08:24"Да пошли они все..."
Да, именно так. Слово в слово :)
И я не обижен, у меня уже есть мой любимый проект, да и без интересных предложений я не остаюсь.
Я просто реально зол, потому что эти люди учат других, как быть "индусами". И это один из лучших университетов СПб.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha