質問編集履歴

12

追記4を追加

2018/04/17 13:35

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -226,4 +226,82 @@
226
226
 
227
227
 
228
228
 
229
+ ###■追記4
230
+
231
+
232
+
233
+ KSwordOfHasteさんに教えていただいた結果、動作するようにできました。
234
+
235
+ ご指摘のとおり、kotlinのコンパイラのバグのようです。
236
+
229
- **※「追記1」「追記2」で記載した org.jetbrains.kotlin.codegen.CompilationException 発生しまう理由はまだわかっていません**
237
+ Collectorのメソッド型引数を明示的にすることで CompilationException 発生しなくなりま
238
+
239
+
240
+
241
+ ```Kotlin
242
+
243
+ // 2.) Definition of the fitness function.
244
+
245
+ fun eval(gt: Genotype<BitGene>): Int {
246
+
247
+ return gt.chromosome
248
+
249
+ .`as`(BitChromosome::class.java)
250
+
251
+ .bitCount()
252
+
253
+ }
254
+
255
+
256
+
257
+ fun main(vararg args: String) {
258
+
259
+
260
+
261
+ // 1.) Define the genotype (factory) suitable for the problem.
262
+
263
+ val gtf = Genotype.of(BitChromosome.of(10, 0.5))
264
+
265
+
266
+
267
+ // 3.) Create the execution environment.
268
+
269
+ val engine = Engine.builder(java.util.function.Function<Genotype<BitGene>, Int> { eval(it) }, gtf).build()
270
+
271
+
272
+
273
+ // 4.) Start the execution (evolution) and collect the result.
274
+
275
+ val result = engine.stream()
276
+
277
+ .limit(100)
278
+
279
+ .collect(EvolutionResult.toBestGenotype<BitGene, Int>())
280
+
281
+
282
+
283
+ println("Hello World:\n$result")
284
+
285
+
286
+
287
+ }
288
+
289
+ ```
290
+
291
+
292
+
293
+ ちなみに結果は以下のようになり、遺伝的アルゴリズムにより10個体100世代で10bitのうち最もビットが立つものを探索する、というものでした。
294
+
295
+
296
+
297
+ ```
298
+
299
+ Hello World:
300
+
301
+ [00000011|11111111]
302
+
303
+ ```
304
+
305
+
306
+
307
+ ありがとうございました。

11

追記3を追加

2018/04/17 13:35

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -112,7 +112,11 @@
112
112
 
113
113
 
114
114
 
115
+
116
+
115
- ■追記1
117
+ ###■追記1
118
+
119
+
116
120
 
117
121
  「3.」の部分を以下のように書き換えたところ、コンパイルは通ったのですが、実行時に以下のエラーとなってしまいました。
118
122
 
@@ -174,11 +178,9 @@
174
178
 
175
179
 
176
180
 
177
- ---
181
+
178
-
179
-
180
-
182
+
181
- ■追記2
183
+ ###■追記2
182
184
 
183
185
  「3.」の部分を以下のように書き換えたところ、追記1と同じ現象になってしましました。
184
186
 
@@ -191,3 +193,37 @@
191
193
  val engine = Engine.builder(func, gtf).build()
192
194
 
193
195
  ```
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+ ###■追記3
204
+
205
+
206
+
207
+ 元の問題についてはだいぶわかりました。変性は関係ありませんでした。
208
+
209
+ 当たり前なのかもしれませんが、 Java の Function を引数にとるメソッドに Kotlin のラムダ式を渡そうとしても型が違うのでコンパイルが通らない、ということを理解していませんでした。
210
+
211
+
212
+
213
+ ```Kotlin
214
+
215
+ // これの型は (Genotype<BitGene>) -> Int
216
+
217
+ val hoge = { gf: Genotype<BitGene> -> eval(gf) }
218
+
219
+
220
+
221
+ // これの型は java.util.function.Function<Genotype<GitGene>, Int>
222
+
223
+ val piyo = java.util.function.Function { gf: Genotype<BitGene> -> eval(gf) }
224
+
225
+ ```
226
+
227
+
228
+
229
+ **※「追記1」「追記2」で記載した org.jetbrains.kotlin.codegen.CompilationException が発生してしまう理由はまだわかっていません。**

10

追記2を追加

2018/04/17 08:10

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -171,3 +171,23 @@
171
171
 
172
172
 
173
173
  ```
174
+
175
+
176
+
177
+ ---
178
+
179
+
180
+
181
+ ■追記2
182
+
183
+ 「3.」の部分を以下のように書き換えたところ、追記1と同じ現象になってしましました。
184
+
185
+
186
+
187
+ ```Kotlin
188
+
189
+ val func: java.util.function.Function<Genotype<BitGene>, Int> = java.util.function.Function { gf: Genotype<BitGene> -> eval(gf) }
190
+
191
+ val engine = Engine.builder(func, gtf).build()
192
+
193
+ ```

9

表記崩れを修正

2018/04/15 14:32

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -106,6 +106,8 @@
106
106
 
107
107
  Windows10
108
108
 
109
+
110
+
109
111
  ---
110
112
 
111
113
 

8

コード「4.」を追記

2018/04/15 14:24

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -37,6 +37,20 @@
37
37
  // 3.) Create the execution environment.
38
38
 
39
39
  val engine = Engine.builder({ gf: Genotype<BitGene> -> eval(gf) }, gtf)
40
+
41
+
42
+
43
+ // 4.) Start the execution (evolution) and collect the result.
44
+
45
+ val result = engine.stream()
46
+
47
+ .limit(100)
48
+
49
+ .collect(EvolutionResult.toBestGenotype())
50
+
51
+
52
+
53
+ println("Hello World:\n$result")
40
54
 
41
55
 
42
56
 

7

Windowsであることを追記

2018/04/15 12:50

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
  IntelliJ IDEA 2018.1.1 (Ultimate Edition) Build #IU-181.4445.78
92
92
 
93
-
93
+ Windows10
94
94
 
95
95
  ---
96
96
 

6

エラー全文を記載

2018/04/15 12:47

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -111,3 +111,47 @@
111
111
 
112
112
 
113
113
  ![IDEが出力したエラー](8c0f82b6acfe4512fe66c69c5c3024ec.png)
114
+
115
+
116
+
117
+ ```
118
+
119
+ Error:Kotlin: [Internal Error] org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Error type encountered: (???..???) (FlexibleTypeImpl).
120
+
121
+ Cause: Error type encountered: (???..???) (FlexibleTypeImpl).
122
+
123
+ File being compiled at position: (26,3) in C:/Users/mosa/Documents/hoge/src/main/java/HelloWorld.kt
124
+
125
+ The root cause was thrown at: KotlinTypeMapper.java:122
126
+
127
+ at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:328)
128
+
129
+ at org.jetbrains.kotlin.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:372)
130
+
131
+ at org.jetbrains.kotlin.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1193)
132
+
133
+ at org.jetbrains.kotlin.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1138)
134
+
135
+ at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitBlockExpression(CodegenStatementVisitor.java:56)
136
+
137
+ at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitBlockExpression(CodegenStatementVisitor.java:22)
138
+
139
+ at org.jetbrains.kotlin.psi.KtBlockExpression.accept(KtBlockExpression.java:44)
140
+
141
+ at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:307)
142
+
143
+ at org.jetbrains.kotlin.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:372)
144
+
145
+ at org.jetbrains.kotlin.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:338)
146
+
147
+ at org.jetbrains.kotlin.codegen.ExpressionCodegen.returnExpression(ExpressionCodegen.java:1590)
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+ ```

5

バージョン表記を詳細にしました

2018/04/15 12:46

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -84,9 +84,11 @@
84
84
 
85
85
 
86
86
 
87
- Kotlin 1.2.31
87
+ Kotlin: 1.2.31
88
88
 
89
- Java 1.8.0
89
+ Java: 1.8.0_152-release-1136-b27 amd64
90
+
91
+ IntelliJ IDEA 2018.1.1 (Ultimate Edition) Build #IU-181.4445.78
90
92
 
91
93
 
92
94
 

4

バージョンを追記

2018/04/15 12:43

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -84,6 +84,12 @@
84
84
 
85
85
 
86
86
 
87
+ Kotlin 1.2.31
88
+
89
+ Java 1.8.0
90
+
91
+
92
+
87
93
  ---
88
94
 
89
95
 

3

微修正

2018/04/15 11:56

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -92,7 +92,13 @@
92
92
 
93
93
  「3.」の部分を以下のように書き換えたところ、コンパイルは通ったのですが、実行時に以下のエラーとなってしまいました。
94
94
 
95
+
96
+
97
+ ```Kotlin
98
+
95
99
  val engine = Engine.builder(java.util.function.Function { gf: Genotype<BitGene> -> eval(gf) }, gtf).build()
100
+
101
+ ```
96
102
 
97
103
 
98
104
 

2

追記1

2018/04/15 08:27

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -81,3 +81,19 @@
81
81
  ちょっと複雑なので混乱しているだけかもしれません。
82
82
 
83
83
  ご教示いただければと思います。
84
+
85
+
86
+
87
+ ---
88
+
89
+
90
+
91
+ ■追記1
92
+
93
+ 「3.」の部分を以下のように書き換えたところ、コンパイルは通ったのですが、実行時に以下のエラーとなってしまいました。
94
+
95
+ val engine = Engine.builder(java.util.function.Function { gf: Genotype<BitGene> -> eval(gf) }, gtf).build()
96
+
97
+
98
+
99
+ ![IDEが出力したエラー](8c0f82b6acfe4512fe66c69c5c3024ec.png)

1

エラーの図をつけ忘れていたので追記しました。

2018/04/15 08:26

投稿

mosa
mosa

スコア218

test CHANGED
File without changes
test CHANGED
@@ -52,6 +52,8 @@
52
52
 
53
53
 
54
54
 
55
+ ![エラー](6e1c108ba97e8206eb68c03d6d04924f.png)
56
+
55
57
 
56
58
 
57
59
  呼び出し先のメソッドの定義は以下の通りです。