Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.11.2019
Сообщений: 5
1

Перевести код с Kotlin на Java

28.09.2020, 22:25. Просмотров 2287. Ответов 1

Код
const val EMPLOYED_BEES_COUNT: Int = 2
const val ONLOOKER_BEES_COUNT: Int = 28
const val PALETTE_SIZE: Int = 10000

class ABCAlgorithm(private val initialGraph: Graph) {
    var graph = Graph(initialGraph.getAdjMatrix())
    private var availableVertices: Array<Int> = graph.getVertexArray()
    private val palette: Array<Int> = Array(PALETTE_SIZE) { i -> i }
    private var usedColors: MutableList<Int> = mutableListOf()

    fun calculateChromaticNumber(): Int {
        while (!this.isFinished()) {
            val selectedVertices = this.sendEmployedBees()
            this.sendOnlookerBees(selectedVertices)
        }
        val chromaticNumber = usedColors.size
        return chromaticNumber
    }

    fun resetAlgorithm() {
        usedColors = mutableListOf()
        availableVertices = graph.getVertexArray()
        graph = Graph(initialGraph.getAdjMatrix())
    }

    private fun isFinished(): Boolean {
        return graph.isAllVerticesValidColored()
    }

    private fun sendEmployedBees(): Array<Int> {
        val selectedVertices: MutableList<Int> = MutableList(0) { i -> i }
        for (employedBee in 0 until EMPLOYED_BEES_COUNT) {
            val randomSelectedVertexIndex = (0 until availableVertices.size).random()
            val randomSelectedVertex = availableVertices[randomSelectedVertexIndex]
            availableVertices = availableVertices
                .filter { vertex -> vertex != randomSelectedVertex }
                .toTypedArray()
            selectedVertices += randomSelectedVertex
        }
        return selectedVertices.toTypedArray()
    }

    private fun sendOnlookerBees(selectedVertices: Array<Int>) {
        val selectedVerticesDegrees = selectedVertices.map { vertex ->
            graph.getVertexDegree(vertex)
        }.toTypedArray()
        val onlookerBeesSplit = this.getOnlookerBeesSplit(selectedVerticesDegrees)
        selectedVertices.forEachIndexed { selectedVertexIndex, selectedVertex ->
            val onlookerBeesCountForVertex = onlookerBeesSplit[selectedVertexIndex]
            val connectedVertices = graph.getConnectedVertexes(selectedVertex)
            this.colorConnectedVertices(connectedVertices, onlookerBeesCountForVertex)
            this.colorVertex(selectedVertex)
        }
    }

    private fun getOnlookerBeesSplit(selectedVerticesDegrees: Array<Int>): Array<Int> {
        val nectarValues = this.getNectarValues(selectedVerticesDegrees)
        var onlookerBeesCount = ONLOOKER_BEES_COUNT
        return nectarValues.mapIndexed { index, nectar ->
            if (index == nectarValues.size) onlookerBeesCount
            else {
                val onlookerBeesCountForCurrentVertex = (onlookerBeesCount * nectar).toInt()
                onlookerBeesCount -= onlookerBeesCountForCurrentVertex
                onlookerBeesCountForCurrentVertex
            }
        }.toTypedArray()
    }

    private fun getNectarValues(selectedVerticesDegrees: Array<Int>): Array<Double> {
        val summarySelectedVerticesDegree = selectedVerticesDegrees.sum()
        return selectedVerticesDegrees.map { vertexDegree ->
            (vertexDegree / summarySelectedVerticesDegree).toDouble()
        }.toTypedArray()
    }

    private fun colorConnectedVertices(connectedVertices: Array<Int>, onlookerBeesCount: Int) {
        connectedVertices.forEachIndexed { connectedVertexIndex, connectedVertex ->
            if (connectedVertexIndex >= onlookerBeesCount - 1) return
            colorVertex(connectedVertex)
        }
    }

    private fun colorVertex(vertex: Int) {
        val availableColors = usedColors.toList().toMutableList() //copy array
        var isColoredSuccessfully = false
        while (!isColoredSuccessfully) {
            if (availableColors.size == 0) {
                val newColor = getNextColor()
                usedColors.plusAssign(newColor)
                graph.tryToColorAndCheckIsValid(vertex, newColor)
                isColoredSuccessfully = true
                break
            }
            val randomAvailableColorIndex = (0 until availableColors.size).random()
            val color = availableColors[randomAvailableColorIndex]
            availableColors.removeAt(randomAvailableColorIndex)
            isColoredSuccessfully = graph.tryToColorAndCheckIsValid(vertex, color)
        }
    }

    private fun getNextColor(): Int {
        return palette[usedColors.size]
    }

     val ITERATIONS_COUNT: Int = 1000
     val ITERATIONS_PER_STEP: Int = 20
    fun test() {
        var bestResult = calculateChromaticNumber()
        resetAlgorithm()
        for (iteration in 0..ITERATIONS_COUNT) {
            if (iteration % ITERATIONS_PER_STEP == 0) {
                println("on iteration $iteration best result is $bestResult")
            }
            val newChromaticNumber = calculateChromaticNumber()
            if (newChromaticNumber < bestResult) {
                bestResult = newChromaticNumber
               graph.printColors()
            }
            resetAlgorithm()
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2020, 22:25
Ответы с готовыми решениями:

Kotlin "it" как перевести на java?
есть пример кода на котлине: override fun one(id: Long): Observable&lt;Banner&gt; { return...

Как перевести код с паскаля на Java. Пытался сам но код не хочет работать переведенный
А сам код на паскале работает. Вот код на паскале var i,j,m,c,d: integer; A:array of...

Перевести код Java на С++
Вот Java: package com.company; import java.util.Arrays; import java.lang.String; import ...

Перевести код с Java на C++
import java.io.*; import java.util.*; public class main { public static class ant{ ...

1
1823 / 1438 / 359
Регистрация: 17.02.2014
Сообщений: 7,353
29.09.2020, 07:31 2
Borovyk, какую задачу решает код?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2020, 07:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перевести код из C+ на Java
#include &lt;iostream&gt; using namespace std; template&lt;typename T&gt; class AVLTree { private: ...

Перевести код из Java в C++
public class LinearProbingHashST&lt;Key, Value&gt; { private int M = 30001; private Value...

Перевести код с Java на C#
Как перевести это на c# ? RedBlackTree&lt;T extends Comparable&lt;T&gt;&gt; implements IRedBlackTree&lt;T&gt;,...

Перевести код с java на C++
Вот код java: package com.company; class Main { public static void main(String args) { ...

Перевести код из Java в C++
Вот код на джаве package com.company; import java.lang.String; import java.util.Random; class...

Перевести код с Java на C#
public static void findMaxSubarray(int arr) { if (arr == null || arr.length == 0) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.