Difference between revisions of "Geometry Analysis"

From ccitonlinewiki
Jump to: navigation, search
Line 1: Line 1:
Berikut ini adalah contoh kode Python untuk melakukan analisis geometri pada desain tabung hidrogen dengan menggunakan paket SciPy:
+
Berikut merupakan code optimasi tangki hidrogen dengan kapasitas 1 liter, pressure 8 bar, dan biaya produksi maksimal Rp. 500.000
  
python
+
<syntaxhighlight lang=xml>
 
import numpy as np
 
import numpy as np
 
from scipy.optimize import minimize
 
from scipy.optimize import minimize
  
def volume_cylinder(height, radius):
+
def objektif(x):
     return np.pi * radius**2 * height
+
     # x[0] mewakili jari-jari, x[1] mewakili tinggi
 +
    jari_jari = x[0]
 +
    tinggi = x[1]
  
def surface_area_cylinder(height, radius):
+
    # Hitung luas permukaan struktur silinder
     return 2 * np.pi * radius * (radius + height)
+
     luas_permukaan = 2 * np.pi * jari_jari * (jari_jari + tinggi)
  
def objective_function(x):
+
     return luas_permukaan
    height, radius = x
 
     return surface_area_cylinder(height, radius)
 
  
def constraint(x):
+
def konstrain(x):
     height, radius = x
+
     # x[0] mewakili jari-jari, x[1] mewakili tinggi
     return volume_cylinder(height, radius) - target_volume
+
    jari_jari = x[0]
 +
     tinggi = x[1]
  
# Inisialisasi parameter dan target volume
+
    # Hitung volume internal struktur silinder
target_volume = 1000  # Volume yang diinginkan untuk tabung hidrogen
+
    volume = np.pi * jari_jari**2 * tinggi
  
# Inisialisasi batasan pada tinggi dan radius tabung
+
    # Kembalikan selisih antara volume dan nilai yang diinginkan (1000 cm^3)
height_bounds = (1, 100)
+
    return volume - 1000
radius_bounds = (1, 50)
 
  
# Inisialisasi nilai awal
+
# Tebakan awal untuk jari-jari dan tinggi
initial_guess = [10, 5] # Misalnya, tinggi awal = 10 dan radius awal = 5
+
x0 = [1.0, 10.0]
  
# Definisikan batasan dan fungsi tujuan
+
# Tentukan batasan untuk variabel (jari-jari dan tinggi)
constraint_volume = {'type': 'eq', 'fun': constraint}
+
batas = [(0, None), (0, None)]
objective = {'type': 'min', 'fun': objective_function}
 
  
# Optimisasi menggunakan metode SLSQP
+
# Tentukan konstrain dalam bentuk kamus
result = minimize(objective_function, initial_guess, method='SLSQP', bounds=[height_bounds, radius_bounds], constraints=constraint_volume)
+
konstrain_dict = {'type': 'eq', 'fun': konstrain}
  
# Output hasil optimisasi
+
# Gunakan fungsi minimize untuk mengoptimalkan fungsi objektif dengan memenuhi konstrain
 +
hasil = minimize(objektif, x0, method='SLSQP', bounds=batas, constraints=konstrain_dict)
 +
 
 +
# Cetak hasil yang dioptimalkan
 
print("Hasil Optimisasi:")
 
print("Hasil Optimisasi:")
print("Tinggi Tabung: {:.2f} cm".format(result.x[0]))
+
print("Jari-jari: {:.2f} cm".format(hasil.x[0]))
print("Radius Tabung: {:.2f} cm".format(result.x[1]))
+
print("Tinggi: {:.2f} cm".format(hasil.x[1]))
print("Volume Tabung: {:.2f} cm^3".format(volume_cylinder(result.x[0], result.x[1])))
+
print("Luas Permukaan: {:.2f} cm^2".format(hasil.fun))
print("Luas Permukaan Tabung: {:.2f} cm^2".format(result.fun))
+
 
 +
</syntaxhighlight>
 +
 
 +
Didapatkan hasil sebagai berikut:  
 +
Jari-jari    : 5.42 cm
 +
 
 +
Tinggi        : 10.84 cm
  
Dalam contoh di atas, kita mendefinisikan fungsi volume_cylinder() untuk menghitung volume tabung hidrogen berdasarkan tinggi dan radius, dan surface_area_cylinder() untuk menghitung luas permukaan tabung. Fungsi objective_function() adalah fungsi tujuan yang ingin kita minimalkan, yaitu luas permukaan tabung.
+
Luas Permukaan: 553.58 cm^2
  
Selain itu, kita juga mendefinisikan fungsi constraint() untuk membatasi volume tabung agar sesuai dengan target volume yang diinginkan. Fungsi minimize() digunakan untuk menjalankan optimisasi dengan metode Sequential Least SQuares Programming (SLSQP), di mana kita memasukkan batasan dan fungsi tujuan.
 
  
Hasil optimisasi akan mencetak tinggi tabung, radius tabung, volume tabung, dan luas permukaan tabung yang optimal.
+
    from scipy.optimize import minimize
 +
    # Harga dan kapasitas
 +
    harga_per_unit = 100000  # Harga per unit penyimpanan hidrogen  = 1 
 +
    # Kapasitas penyimpanan hidrogen per unit
 +
    # Anggaran maksimal
 +
    budget_maksimal = 500000
 +
    # Fungsi tujuan
 +
    def fungsi_tujuan(x):
 +
    return -x
 +
    # Kendala
 +
    def kendala(anggaran):
 +
    return budget_maksimal - (harga_per_unit * anggaran)
 +
    kendala_anggaran = {'type': 'ineq', 'fun': kendala}
 +
    # Nilai awal
 +
    x0 = 0
 +
    # Batasan
 +
    batas = [(0, None)]
 +
    # Menyelesaikan masalah optimisasi
 +
    solusi = minimize(fungsi_tujuan, x0, method='SLSQP', bounds=batas, constraints=[kendala_anggaran])
 +
    # Menampilkan hasil
 +
    print("Status:", solusi.success and "Optimal" or "Tidak ditemukan solusi")
 +
    print("Jumlah unit penyimpanan hidrogen yang akan dibeli:", solusi.x[0])
 +
    print("Total kapasitas penyimpanan:", solusi.x[0] * kapasitas_per_unit, "liter")
 +
    print("Total biaya:", solusi.x[0] * harga_per_unit, "Rupiah")

Revision as of 02:30, 12 June 2023

Berikut merupakan code optimasi tangki hidrogen dengan kapasitas 1 liter, pressure 8 bar, dan biaya produksi maksimal Rp. 500.000

import numpy as np
from scipy.optimize import minimize

def objektif(x):
    # x[0] mewakili jari-jari, x[1] mewakili tinggi
    jari_jari = x[0]
    tinggi = x[1]

    # Hitung luas permukaan struktur silinder
    luas_permukaan = 2 * np.pi * jari_jari * (jari_jari + tinggi)

    return luas_permukaan

def konstrain(x):
    # x[0] mewakili jari-jari, x[1] mewakili tinggi
    jari_jari = x[0]
    tinggi = x[1]

    # Hitung volume internal struktur silinder
    volume = np.pi * jari_jari**2 * tinggi

    # Kembalikan selisih antara volume dan nilai yang diinginkan (1000 cm^3)
    return volume - 1000

# Tebakan awal untuk jari-jari dan tinggi
x0 = [1.0, 10.0]

# Tentukan batasan untuk variabel (jari-jari dan tinggi)
batas = [(0, None), (0, None)]

# Tentukan konstrain dalam bentuk kamus
konstrain_dict = {'type': 'eq', 'fun': konstrain}

# Gunakan fungsi minimize untuk mengoptimalkan fungsi objektif dengan memenuhi konstrain
hasil = minimize(objektif, x0, method='SLSQP', bounds=batas, constraints=konstrain_dict)

# Cetak hasil yang dioptimalkan
print("Hasil Optimisasi:")
print("Jari-jari: {:.2f} cm".format(hasil.x[0]))
print("Tinggi: {:.2f} cm".format(hasil.x[1]))
print("Luas Permukaan: {:.2f} cm^2".format(hasil.fun))

Didapatkan hasil sebagai berikut: Jari-jari  : 5.42 cm

Tinggi  : 10.84 cm

Luas Permukaan: 553.58 cm^2


   from scipy.optimize import minimize
   # Harga dan kapasitas
   harga_per_unit = 100000  # Harga per unit penyimpanan hidrogen  = 1  
   # Kapasitas penyimpanan hidrogen per unit
   # Anggaran maksimal
   budget_maksimal = 500000
   # Fungsi tujuan
   def fungsi_tujuan(x):
   return -x
   # Kendala
   def kendala(anggaran):
   return budget_maksimal - (harga_per_unit * anggaran)
   kendala_anggaran = {'type': 'ineq', 'fun': kendala}
   # Nilai awal
   x0 = 0
   # Batasan
   batas = [(0, None)]
   # Menyelesaikan masalah optimisasi
   solusi = minimize(fungsi_tujuan, x0, method='SLSQP', bounds=batas, constraints=[kendala_anggaran])
   # Menampilkan hasil
   print("Status:", solusi.success and "Optimal" or "Tidak ditemukan solusi")
   print("Jumlah unit penyimpanan hidrogen yang akan dibeli:", solusi.x[0])
   print("Total kapasitas penyimpanan:", solusi.x[0] * kapasitas_per_unit, "liter")
   print("Total biaya:", solusi.x[0] * harga_per_unit, "Rupiah")