質問編集履歴

1

プログラムの修正

2021/11/11 05:02

投稿

robocat
robocat

スコア4

test CHANGED
File without changes
test CHANGED
@@ -308,7 +308,103 @@
308
308
 
309
309
  ###新たに加えた制約
310
310
 
311
- if x_r.value >= 1:
311
+ if x_r.value() >= 1:
312
+
313
+ y_r=1
314
+
315
+ problem += y_r == 1
316
+
317
+
318
+
319
+ # 最適化
320
+
321
+ problem.solve()
322
+
323
+
324
+
325
+ # 結果の表示
326
+
327
+ print("エスプレッソ",x_e.value(),"個")
328
+
329
+ print("ラズベリー",x_r.value(),"個")
330
+
331
+ print("儲け",pulp.value(problem.objective),"円")
332
+
333
+
334
+
335
+ ```
336
+
337
+ 結果は以下の通りでして、エラーが出ました。
338
+
339
+
340
+
341
+ ```Result1
342
+
343
+ ~省略~
344
+
345
+ if x_r.value() >= 1:
346
+
347
+ TypeError: '>=' not supported between instances of 'NoneType' and 'int'
348
+
349
+ ```
350
+
351
+
352
+
353
+
354
+
355
+ Challenge2:自作の“決定変数を用いたスイッチ(if構文)”の機能を果たす制約を導入後(アイス生産問題)
356
+
357
+ ---
358
+
359
+
360
+
361
+ Challenge1でエラーが出たのはプログラムでの制約の表現方法が悪いのかと考えました。
362
+
363
+ そのため、試しに“x_r.value”の“.value”を外してみることにしました。
364
+
365
+
366
+
367
+ ```Challenge2
368
+
369
+ import pulp
370
+
371
+
372
+
373
+ problem = pulp.LpProblem('ice', pulp.LpMaximize)
374
+
375
+
376
+
377
+ # 決定変数を定義
378
+
379
+ x_e = pulp.LpVariable('x_e', lowBound=0, cat=pulp.LpInteger)
380
+
381
+ x_r = pulp.LpVariable('x_r', lowBound=0, cat=pulp.LpInteger)
382
+
383
+
384
+
385
+ ###新たに加えた決定変数
386
+
387
+ y_r = pulp.LpVariable('y_r', lowBound=0, cat=pulp.LpBinary)
388
+
389
+
390
+
391
+ # 目的関数を設定
392
+
393
+ problem += 50*x_e +10*x_r
394
+
395
+
396
+
397
+ # 制約を設定
398
+
399
+ problem += 100*x_e + 150* x_r <= 8000
400
+
401
+ problem += 7*x_e + 5* x_r <= 360
402
+
403
+
404
+
405
+ ###新たに加えた制約
406
+
407
+ if x_r >= 1:
312
408
 
313
409
  y_r=1
314
410
 
@@ -316,6 +412,8 @@
316
412
 
317
413
 
318
414
 
415
+
416
+
319
417
  # 最適化
320
418
 
321
419
  problem.solve()
@@ -334,202 +432,104 @@
334
432
 
335
433
  ```
336
434
 
435
+ 結果は以下の通りでして、エラーは出なかったもののラズベリーアイスが0個であることから導入した制約は制約として認識(反映)されていないことがわかります。
436
+
437
+
438
+
439
+ ```Result2
440
+
441
+ エスプレッソ 51.0 個
442
+
443
+ ラズベリー 0.0 個
444
+
445
+ 儲け 2550.0 円
446
+
447
+ ```
448
+
449
+
450
+
451
+
452
+
453
+ Challenge3:自作の“決定変数を用いたスイッチ(if構文)”の機能を果たす制約を導入後(アイス生産問題)
454
+
455
+ ---
456
+
457
+
458
+
459
+ 次に、決定変数y_rを使用するのはいったん諦め、y_rを使用しない(別の決定変数で置き換えない)スイッチ機能のある制約およびプログラムをmax関数を用いて作成してみました。
460
+
461
+
462
+
463
+
464
+
465
+ ```Challenge3
466
+
467
+ import pulp
468
+
469
+
470
+
471
+ problem = pulp.LpProblem('ice', pulp.LpMaximize)
472
+
473
+
474
+
475
+ # 決定変数を定義
476
+
477
+ x_e = pulp.LpVariable('x_e', lowBound=0, cat=pulp.LpInteger)
478
+
479
+ x_r = pulp.LpVariable('x_r', lowBound=0, cat=pulp.LpInteger)
480
+
481
+
482
+
483
+ # 目的関数を設定
484
+
485
+ problem += 50*x_e +10*x_r
486
+
487
+
488
+
489
+ # 制約を設定
490
+
491
+ problem += 100*x_e + 150* x_r <= 8000
492
+
493
+ problem += 7*x_e + 5* x_r <= 360
494
+
495
+
496
+
497
+ ###新たに加えた制約
498
+
499
+ problem += max(x_r,0) >= 1
500
+
501
+
502
+
503
+
504
+
505
+ # 最適化
506
+
507
+ problem.solve()
508
+
509
+
510
+
511
+ # 結果の表示
512
+
513
+ print("エスプレッソ",x_e.value(),"個")
514
+
515
+ print("ラズベリー",x_r.value(),"個")
516
+
517
+ print("儲け",pulp.value(problem.objective),"円")
518
+
519
+
520
+
521
+ ```
522
+
337
523
  結果は以下の通りでして、エラーが出ました。
338
524
 
339
-
525
+ このようなmax関数を使用した制約を作成することはできないようです。
340
-
526
+
527
+
528
+
341
- ```Result1
529
+ ```Result3
342
530
 
343
531
  ~省略~
344
532
 
345
- if x_r.value >= 1:
346
-
347
- TypeError: '>=' not supported between instances of 'method' and 'int'
348
-
349
- ```
350
-
351
-
352
-
353
-
354
-
355
- Challenge2:自作の“決定変数を用いたスイッチ(if構文)”の機能を果たす制約を導入後(アイス生産問題)
356
-
357
- ---
358
-
359
-
360
-
361
- Challenge1でエラーが出たのはプログラムでの制約の表現方法が悪いのかと考えました。
362
-
363
- そのため、試しに“x_r.value”の“.value”を外してみることにしました。
364
-
365
-
366
-
367
- ```Challenge2
368
-
369
- import pulp
370
-
371
-
372
-
373
- problem = pulp.LpProblem('ice', pulp.LpMaximize)
374
-
375
-
376
-
377
- # 決定変数を定義
378
-
379
- x_e = pulp.LpVariable('x_e', lowBound=0, cat=pulp.LpInteger)
380
-
381
- x_r = pulp.LpVariable('x_r', lowBound=0, cat=pulp.LpInteger)
382
-
383
-
384
-
385
- ###新たに加えた決定変数
386
-
387
- y_r = pulp.LpVariable('y_r', lowBound=0, cat=pulp.LpBinary)
388
-
389
-
390
-
391
- # 目的関数を設定
392
-
393
- problem += 50*x_e +10*x_r
394
-
395
-
396
-
397
- # 制約を設定
398
-
399
- problem += 100*x_e + 150* x_r <= 8000
400
-
401
- problem += 7*x_e + 5* x_r <= 360
402
-
403
-
404
-
405
- ###新たに加えた制約
406
-
407
- if x_r >= 1:
408
-
409
- y_r=1
410
-
411
- problem += y_r == 1
412
-
413
-
414
-
415
-
416
-
417
- # 最適化
418
-
419
- problem.solve()
420
-
421
-
422
-
423
- # 結果の表示
424
-
425
- print("エスプレッソ",x_e.value(),"個")
426
-
427
- print("ラズベリー",x_r.value(),"個")
428
-
429
- print("儲け",pulp.value(problem.objective),"円")
430
-
431
-
432
-
433
- ```
434
-
435
- 結果は以下の通りでして、エラーは出なかったもののラズベリーアイスが0個であることから導入した制約は制約として認識(反映)されていないことがわかります。
436
-
437
-
438
-
439
- ```Result2
440
-
441
- エスプレッソ 51.0 個
442
-
443
- ラズベリー 0.0 個
444
-
445
- 儲け 2550.0 円
446
-
447
- ```
448
-
449
-
450
-
451
-
452
-
453
- Challenge3:自作の“決定変数を用いたスイッチ(if構文)”の機能を果たす制約を導入後(アイス生産問題)
454
-
455
- ---
456
-
457
-
458
-
459
- 次に、決定変数y_rを使用するのはいったん諦め、y_rを使用しない(別の決定変数で置き換えない)スイッチ機能のある制約およびプログラムをmax関数を用いて作成してみました。
460
-
461
-
462
-
463
-
464
-
465
- ```Challenge3
466
-
467
- import pulp
468
-
469
-
470
-
471
- problem = pulp.LpProblem('ice', pulp.LpMaximize)
472
-
473
-
474
-
475
- # 決定変数を定義
476
-
477
- x_e = pulp.LpVariable('x_e', lowBound=0, cat=pulp.LpInteger)
478
-
479
- x_r = pulp.LpVariable('x_r', lowBound=0, cat=pulp.LpInteger)
480
-
481
-
482
-
483
- # 目的関数を設定
484
-
485
- problem += 50*x_e +10*x_r
486
-
487
-
488
-
489
- # 制約を設定
490
-
491
- problem += 100*x_e + 150* x_r <= 8000
492
-
493
- problem += 7*x_e + 5* x_r <= 360
494
-
495
-
496
-
497
- ###新たに加えた制約
498
-
499
- problem += max(x_r,0) >= 1
500
-
501
-
502
-
503
-
504
-
505
- # 最適化
506
-
507
- problem.solve()
508
-
509
-
510
-
511
- # 結果の表示
512
-
513
- print("エスプレッソ",x_e.value(),"個")
514
-
515
- print("ラズベリー",x_r.value(),"個")
516
-
517
- print("儲け",pulp.value(problem.objective),"円")
518
-
519
-
520
-
521
- ```
522
-
523
- 結果は以下の通りでして、エラーが出ました。
524
-
525
- このようなmax関数を使用した制約を作成することはできないようです。
526
-
527
-
528
-
529
- ```Result3
530
-
531
- ~省略~
532
-
533
533
  problem += max(x_r,0) >= 1
534
534
 
535
535
  TypeError: '>' not supported between instances of 'int' and 'LpVariable'