Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using JuMP, Ipopt
- # Julia-kielella epälineaarista optimointia
- # kahden ellipsin kehien välinen minimi -ja maksimietäisyydet
- # Juhani Kaukoranta 12.10.2022
- # Ajetaan komennoillalla EllipsitMin() ja EllipsitMax()
- function EllipsoiditMin() # ellipsien kehien minimietäisyys
- model = Model(Ipopt.Optimizer)
- set_silent(model)
- @variable(model, x1,start=1.0)
- @variable(model, y1,start=2.0)
- @variable(model, z1,start=3.0)
- @variable(model, x2,start=3.0)
- @variable(model, y2,start=4.0)
- @variable(model, z2,start=5.0)
- @NLobjective(model, Min, sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)) # minimoidaan etäisyys
- @NLconstraint(model, cons1, (x1-5)^2/16+(y1-2)^2/9+(z1-1)^2/4==1)
- @NLconstraint(model, cons2, (x2+2)^2/4+(y2-1)^2/5+(z2-1)^2/7==1)
- optimize!(model)
- print(model)
- println("Kehien minimietäisyys = ", objective_value(model)) # tulostaa minimin
- println("(x1,y1,z1) = (",value(x1)," , ",value(y1)," , ",value(z1),")")
- println("(x2,y2,z2) = (",value(x2)," , ",value(y2)," , ",value(z2),")")
- end
- function EllipsoiditMax() # ellipsien kehien maksimietäisyys
- model = Model(Ipopt.Optimizer)
- set_silent(model)
- @variable(model, x1,start=1.0)
- @variable(model, y1,start=2.0)
- @variable(model, z1,start=3.0)
- @variable(model, x2,start=3.0)
- @variable(model, y2,start=4.0)
- @variable(model, z2,start=5.0)
- @NLobjective(model, Max, sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)) # minimoidaan etäisyys
- @NLconstraint(model, cons1, (x1-5)^2/16+(y1-2)^2/9+(z1-1)^2/4==1)
- @NLconstraint(model, cons2, (x2+2)^2/4+(y2-1)^2/5+(z2-1)^2/7==1)
- optimize!(model)
- print(model)
- println("Kehien maksimimietäisyys = ", objective_value(model)) # tulostaa maksimin
- println("(x1,y1,z1) = (",value(x1)," , ",value(y1)," , ",value(z1),")")
- println("(x2,y2,z2) = (",value(x2)," , ",value(y2)," , ",value(y1),")")
- end
Advertisement
Add Comment
Please, Sign In to add comment