最近,我在Haskell中实现了一个天真的DPLL Sat解算器,改编自John Harrison的实用逻辑和自动推理手册.
DPLL是各种回溯搜索的,所以想要使用所述实验逻辑单子从奥列格Kiselyov等.但是,我真的不明白我需要改变什么.
这是我得到的代码.
{-# LANGUAGE MonadComprehensions #-}
module DPLL where
import Prelude hiding (foldr)
import Control.Monad (join,mplus,mzero,guard,msum)
import Data.Set.Monad (Set, (\\), member, partition, toList, foldr)
import Data.Maybe (listToMaybe)
-- "Literal" propositions are either true or false
data Lit p = T p | F p deriving (Show,Ord,Eq)
neg :: Lit p -> Lit p
neg (T p) = F p
neg (F p) …Run Code Online (Sandbox Code Playgroud) 我使用QuickCheck-2.5.1.1进行QA.我测试两个纯函数gold :: a -> Float
和f :: a -> Float,其中a实例随心所欲.
这gold是参考计算,f是我正在优化的变体.
到目前为止,我使用quickcheck的大多数测试都使用了类似的测试\a -> abs (gold a - f a) < 0.0001.
但是,我想收集统计数据并检查阈值,因为知道平均误差和标准偏差对指导我的设计很有用.
有没有办法使用QuickCheck来收集这样的统计数据?
为了给出我正在寻找的那种东西的具体例子,假设我有以下两个函数来近似平方根:
-- Heron's method
heron :: Float -> Float
heron x = heron' 5 1
where
heron' n est
| n > 0 = heron' (n-1) $ (est + (x/est)) / 2
| otherwise = est
-- Fifth order Maclaurin series expansion
maclaurin :: Float …Run Code Online (Sandbox Code Playgroud) 我正在探索使用Julia作为通用科学计算语言(而不是python),但它的启动时间非常缓慢.
有没有办法加速这个?
$ time python -c 'print "Hello"'
Hello
real 0m0.030s
user 0m0.018s
sys 0m0.010s
$ time julia -e 'println("Hello")'
Hello
real 0m4.614s
user 0m4.644s
sys 0m0.116s
Run Code Online (Sandbox Code Playgroud)
附录:这是朱莉娅去年的一位作者的引用.这个策略有些困难吗?
Julia的大部分都是自己编写的,然后进行解析,类型推断和jitted,因此从头开始整个系统的启动大约需要15-20秒.为了加快速度,我们有一个分阶段系统,我们在文件sys.ji中解析,类型推断,然后缓存类型推断AST的序列化版本.然后加载此文件并在运行julia时用于运行系统.但是,没有LLVM代码或机器代码缓存在sys.ji中,因此每次julia启动时仍需要完成所有LLVM jitting,因此大约需要2秒钟.
这2秒的启动延迟非常烦人,我们有一个修复它的计划.基本计划是能够将整个Julia程序编译为二进制文件:可以运行的可执行文件或.so/.dylib共享库,可以从其他程序调用,就好像它们只是共享的C库一样.二进制文件的启动时间与任何其他C程序一样,因此2秒启动延迟将消失.
javascript对象是基于值还是基于参考?例如:
obj1.list =new array();
// ------ populate list
obj2.list = obj1.list
Run Code Online (Sandbox Code Playgroud)
浏览器是否为obj2.list制作了obj1.list的不同副本,或者obj2.list只是对obj1.list的引用?
我正在使用OpenCV用于各种对象检测器,我发现编写可移植代码很困难.
例如,要加载面部检测器,在通过自制软件安装OpenCV的Mac上,我必须写:
haar=cv.Load('/usr/local/Cellar/opencv/2.4.2/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
Run Code Online (Sandbox Code Playgroud)
这不便携; 如果我想换到另一台机器,我将不得不确定另一个绝对路径并更改此代码.
是否有一个变量来保存OpenCV的OpenCV根目录?这样我就可以这样写:
haar=cv.Load(os.path.join(OpenCVRoot, "haarcascades",
"haarcascade_frontalface_default.xml"))
Run Code Online (Sandbox Code Playgroud)
更新:看起来这对我来说不仅仅是一个问题; 这也是OpenCV文档的一个问题.该文档包含以下破坏的示例代码:
>>> import cv
>>> image = cv.LoadImageM("lena.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
>>> cascade = cv.Load("../../data/haarcascades/haarcascade_frontalface_alt.xml")
>>> print cv.HaarDetectObjects(image, cascade, cv.CreateMemStorage(0), 1.2, 2, 0, (20, 20))
[((217, 203, 169, 169), 24)]
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以推断出安装lena.jpg和预训练分类器等示例的方法,这将很容易避免.
资料来源:http://opencv.willowgarage.com/documentation/python/objdetect_cascade_classification.html(2013年3月5日检索)
Haskellsequence函数的 scala 模拟是什么?
http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:sequence
sequence 在 Haskell 中定义如下:
sequence :: Monad m => [m a] -> m [a]
sequence ms = foldr k (return []) ms
where
k m m' = do { x <- m; xs <- m'; return (x:xs) }
Run Code Online (Sandbox Code Playgroud)
以下是一些用途:
ghci> sequence [Just 1, Just 2, Nothing, Just 3]
Nothing
ghci> sequence [[1,2],[3,4],[5,6]]
[[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
Run Code Online (Sandbox Code Playgroud)
提前致谢!
haskell ×3
python ×2
backtracking ×1
javascript ×1
julia ×1
logic ×1
mean ×1
monads ×1
opencv ×1
optimization ×1
portability ×1
qa ×1
quickcheck ×1
scala ×1