月度归档:2017年11月

粒子群优化求解算法 (Particle Swarm Optimization) 在LibreOffice中的应用

粒子群算法实例-求解函数极值》一文列举了如何在python中使用numpy库实现粒子群优化求解算法,以求解函数 f(x)=x+10sin5x+7cos4x 的最大值。LibreOffice的求解器功能中,有一项粒子群优化非线性求解的算法实现。本文讲解如何在LibreOffice进行该函数最大值的计算:

单元格B2: x; C2: -10;
单元格B3: f(x); C3: =C2+10*SIN(5*C2)+7*COS(4*C2)

打开点击菜单“工具-求解器“。
在打开的对话框中,“目标单元格”点选$C$3,“优化结果为”选择“最大”,“依照该单元格的变动”点选$C$2,下方的“限制条件”:$C$2<=10, $C$2=>-10;
单击下方的“选项“,求解器引擎选择“群非线性求解“,对“群算法”单击“编辑”,输入1(表示粒子群优化求解算法)并确定,然后单击“求解”按钮。

约10秒之内,会得到求解结果:
x: 7.8567441372
f(x): 24.8553628690
与《粒子群算法实例-求解函数极值》一文中的结果很接近。

图:

粒子群优化求解算法

粒子群优化求解算法示例

 

icecream – configure: error: Could not figure out what C++ library this is

今日在尝试编译libreoffice时,据说启用icecream能够加速编译,于是就在将一台Fedora 26主机设置为scheduler,这台Fedora主机和另一台Ubuntu主机上启用iceccd守护进程。通过icecc-monitor能够看到两台机器上的icecream均正常。但是当在libreoffice源代码下的 autogen.input 中加入 –enable-icecream 选项后,运行autogen.sh出现以下错误:
...
checking whether gcc supports -mno-avx... yes
checking whether gcc supports -fstack-protector-strong... yes
checking whether gcc supports atomic functions... yes
checking whether gcc supports __builtin_ffs... yes
checking whether gcc supports __attribute__((deprecated(message)))... yes
checking whether /usr/sbin/bin/g++ defines __base_class_type_info in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __class_type_info in cxxabi.h... no
checking whether /usr/sbin/bin/g++ declares __cxa_allocate_exception in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __cxa_eh_globals in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __cxa_exceptions in cxxabi.h... no
checking whether /usr/sbin/bin/g++ declares __cxa_get_globals in cxxabi.h... no
checking whether /usr/sbin/bin/g++ declares __cxa_throw in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __si_class_type_info in cxxabi.h... no
checking whether /usr/sbin/bin/g++ defines __vmi_class_type_info in cxxabi.h... no
checking whether /usr/sbin/bin/g++ supports __attribute__((warn_unused))... no
checking What the C++ library is... configure: error: Could not figure out what C++ library this is
Error running configure at ./autogen.sh line 293.

经过在irc频道询问,最终找到了如下解决办法:原来,Fedora默认将icecream的c++ wrapper安装到了 /usr/libexec/icecc,在 autogen.input 中加入 –with-gcc-home=/usr/libexec/icecc 重新运行autogen.sh即可解决。

When compile libreoffice in Fedora with icecream, you may encounter the above error message. To fix the above error, add the option “–with-gcc-home=/usr/libexec/icecc” in your autogen.input file.