У меня есть список List и я называю его BAT в моем коде. Каждый BAT имеет 2 атрибута. Первый - это позиция, а второй - фитнес. Для каждого списка в BAT я вычисляю его пригодность, используя функцию Sphere. На основе пригодности я применил фильтр, который фильтрует только те списки, чья пригодность меньше, чем у объекта, называемого GF. Это вернет мне БАТ.
Мой код
var GlobalBest_Fitness = Double.PositiveInfinit
var BAT = List.fill(N)(new BAT1(d, MinVal, MaxVal))
BAT.map { x =>
x.fitness = sphere(x.position)
}
BAT.filter(_.Fitness < GF).map { x =>
GF = x.Fitness
}
def sphere(list: List[Double]): Double = {
list.foldLeft(0.0)((x, xs) => x + xs * xs)
}
class BAT1 ( dim:Int , min:Double , max:Double) {
val random = new Random()
var position : List[Double] = List.fill(dim)(random.nextDouble() * (max-min)+min )
var fitness :Double = math.random
}
Этот код устанавливает GF Fitness последнего члена BAT, но я хочу установить для Object GF значение Fitness of List с Lowest Fitness.
Вот некоторые выводы для объяснения вопроса. BAT с 5 списками,
(List(-67.33460898977961, -71.09215709663737, 55.89607430834903, -43.23771807116002),14581.91575554507)
(List(90.12684307743376, 43.946793301728036, -93.06789837138616, -76.86083905559525),24623.390772205956)
(List(12.619843833260006, -86.17961848282789, 48.99208107528267, 24.69991428409682),10596.496873950442)
(List(96.24721330545535, 54.598176031247306, -92.20930457845513, -42.450241098519385),22549.06571516962)
(List(71.10095207554104, 74.02738064902607, 93.76767384566747, 40.917896190085656),21002.04935885428)
Output ==>> GF = 21002.04935885428
Это установка значения GF для последней пригодности Списка, вместо этого ему следует установить его на Наименьшее значение, равное 10596.496873950442, которое соответствует пригодности третьего Списка.
Этот список может быть очень большим и должен повторяться в нем миллионы раз. Я хочу найти оптимальное решение.