小编Jul*_*les的帖子

如何专门化低级函数以提高性能,同时保持高级函数的多态性?

我从我的生产项目中提取了以下最小示例。我的机器学习项目由线性代数库、深度学习库和应用程序组成。

线性代数库包含一个基于可存储向量的矩阵模块:

module Matrix where

import Data.Vector.Storable hiding (sum)

data Matrix a = Matrix { rows :: Int, cols :: Int, items :: Vector a } deriving (Eq, Show, Read)

item :: Storable a => Int -> Int -> Matrix a -> a
item i j m = unsafeIndex (items m) $ i * cols m + j

multiply :: Storable a => Num a => Matrix a -> Matrix a -> Matrix a
multiply a b = Matrix (rows …
Run Code Online (Sandbox Code Playgroud)

performance haskell specialization

8
推荐指数
1
解决办法
168
查看次数

重新定义列表monad实例

我想为列表monad提供我自己的实例.不幸的是,以下内容在编译时会导致重复的实例声明错误.

myReturn :: a -> [a]
myBind :: [a] -> (a -> [b]) -> [b]
instance Monad [] where
    return = myReturn
    (>>=) = myBind
Run Code Online (Sandbox Code Playgroud)

从文档来看,似乎不可能在导入时隐藏实例声明,并且由于列表monad实例已经在前奏中声明,我想我也无法摆脱导入本身.

我想也许我至少可以重新绑定(>>=),return以便我可以使用自己的实现来使用do块,因为块应该只是(>>=)和的应用程序的语法糖(>>).

let
    return = myReturn
    (>>=) = myBind
in
    do
        item1 <- list1
        item2 <- list2
        return (item1, item2)
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎块(>>=)从其他地方获取它们,因为它仍然使用(>>=)默认列表monad实例.

有没有办法让我的实现(>>=)returnlist monad的实例,或者至少是一种方法来使用do块?

monads haskell functional-programming typeclass

3
推荐指数
1
解决办法
691
查看次数

SCIP 没有找到 MIQP 问题的良好解决方案,而 CPLEX 很快找到一个解决方案

我想使用 SCIP 解决具有 267 个变量 [1] 的混合整数二次规划问题。

CPLEX 可以在大约 30 秒内解决该问题,并且在不到一秒的时间内就已经找到了非常接近最优解的解决方案 [2, 3]。

不幸的是,SCIP 确实在解决这个问题上遇到了困难,即使运行了 20 多分钟也无法找到接近最佳的解决方案 [4]。

为什么是这样?CPLEX 在 MIQP 方面真的SCIP 好得多吗?我是否没有正确配置 SCIP?如何使用 SCIP 解决这个问题?

在我看来,SCIP 找到的解决方案与松弛的解决方案相去甚远。我的印象是 SCIP 首先解决松弛问题,然后尝试在此基础上找到整数解。这不正确吗?如果是的话,为什么解决方案还那么遥远?

cplex scip quadratic-programming mixed-integer-programming

2
推荐指数
1
解决办法
565
查看次数