Avatar billede _carsten Nybegynder
26. september 2005 - 17:04 Der er 20 kommentarer

Matematik problem

Er der en herinde som kan klare lidt matematik ?


Har 3 varer (kunne være 10 eller flere) hvordan optimerer/mixer
jeg disse 3 så resultatet opnåes

Skemaet skal forståes på denne måde:
 
    100 kg af Vare 1 indeholder 10% A, 20%, 15% C, resten er ligegyldigt fyldstof.
   


Altså - hvor mange kg skal man tage af hver vare, så man
ender med 100 kg som indeholder 15% A, 12% B og 14% C



Indhold:    kg    A    B    C    Pris
------------------------------------------------------

Vare 1:          100    10      20      15      100

Vare 2:        100      0      10      20      150

Vare 3:          100    25      0      0      180
======================================================
Resultat:      100    15      12      14      ???


Nogen forslag eller link til et sted som kan vise vejen ??
Avatar billede Slettet bruger
26. september 2005 - 17:10 #1
Jeg vil tro du skal have fat i noget linær programmering: http://www2.isye.gatech.edu/~spyros/LP/node14.html#SECTION00030010000000000000
Avatar billede Slettet bruger
26. september 2005 - 17:11 #2
Måske er det nemmere at finde rundt i her: http://en.wikipedia.org/wiki/Linear_programming
Avatar billede arnely Novice
26. september 2005 - 17:28 #3
Hvis jeg forstår dit spørgsmål korrekt, har jeg dette foreslag.
Hvis du skal finde 8% af 200. kr. kan man gøre sådanne. Du sætter en lining op der ser sådanne ud. x=8*200 (x er jo det vi skal finde)
                -------
                  100
                x= 16 kr.
Kan det bruges?

Nu skal vi finde
Avatar billede _carsten Nybegynder
26. september 2005 - 17:34 #4
>arnely

Nej - det er desværre ikke så simpelt, <wicez> er på rette spor, havde bare håbet nogen sad med et link som greb sagen an lidt mere fra bunden, (men måske er det bunden) - det matcher bare ikke lige mine matematik kundskaber.
Avatar billede arne_v Ekspert
26. september 2005 - 17:37 #5
grundliggende skal du vel have en implementering af simplex algoritmen i Java

måske har jeg endda noget liggende
Avatar billede _carsten Nybegynder
26. september 2005 - 17:40 #6
Jeg venter spændt, men bliver nødt til løbe 2-3 timer
Avatar billede thums Praktikant
26. september 2005 - 17:47 #7
Hehe... det kunne næsten ikke lyde mere som en opgave fra noget undervisning... så jeg giver dig kun et hint... det kan løses ved dynamisk programmering.. hvis du skal bruge en vejledende løsning skal du kigge på den algoritme der klare knap-sack-problemet.. :)
Avatar billede arne_v Ekspert
26. september 2005 - 19:43 #8
hov

det er da ikke hverken LP eller knap sack

der er bare 3 ligninger med 3 ubekendte !
Avatar billede arne_v Ekspert
26. september 2005 - 19:45 #9
0.10 x v1 + 0.25 x v3 = 0.15 x 100
0.20 x v1 + 0.10 x v2 = 0.12 x 100
0.15 x v1 + 0.20 x v2 = 0.14 x 100
Avatar billede arne_v Ekspert
26. september 2005 - 19:45 #10
10 x v1 + 25 x v3 = 1500
20 x v1 + 10 x v2 = 1200
15 x v1 + 20 x v2 = 1400
Avatar billede arne_v Ekspert
26. september 2005 - 19:45 #11
v1 = 40
v2 = 80
v3 = 44
Avatar billede _carsten Nybegynder
26. september 2005 - 20:29 #12
>Arne, Jeg er vist ikke helt med

v1 = 40
v2 = 80
v3 = 44

er det resultatet, 40 kg af v1 og 80 kg af v2 o.s.v. - det giver mere end 100 kg tilsammen.

Der er normalt ca. 10 varer, hvoraf der skal vælges max. 4 til at sammensætte én vare til lavest mulig pris, der kan yderligere være det krav, at indholdet af "C" absolut ikke må overstige 14, hvor imod det ikke gør så meget selvom "B" når 12,5

Er vi ikke henne i noget LP ???
Avatar billede Slettet bruger
26. september 2005 - 20:33 #13
Vi er i LP, jo.
Avatar billede _carsten Nybegynder
26. september 2005 - 20:47 #14
Lader spørgsmålet stå åbent et par dage, mens jeg forsøger at studere LP :)
Avatar billede arne_v Ekspert
26. september 2005 - 21:00 #15
er kravet =15% A, =12% B og =14% C ?

eller <=15% A, <=12% B og <=14% C
Avatar billede _carsten Nybegynder
26. september 2005 - 21:07 #16
Kravene er generelt:

Der optimeres til 100 kg, MEN det må om nødvendigt godt svinge 10%, men helst ikke,  optimalt +/- 0,1

A = MAX 15%, men ikke under 14,5%
B = +/- 3%
C = +/- 3%

Der kan dog godt være min./max grænser på både B og C
Avatar billede Slettet bruger
26. september 2005 - 21:10 #17
Så er det jo præcis LP.
Avatar billede arne_v Ekspert
27. september 2005 - 00:22 #18
ikke helt normal LP
Avatar billede arne_v Ekspert
27. september 2005 - 00:22 #19
og det givne problem har så vidt jeg kan se ingen løsning
Avatar billede arne_v Ekspert
27. september 2005 - 00:23 #20
leg selv med:

package september;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Opt extends JFrame implements ChangeListener {
    private JPanel sliders;
    private JSlider slider1;
    private JSlider slider2;
    private JSlider slider3;
    private JPanel total;
    private JLabel a;
    private JLabel b;
    private JLabel c;
   
    public Opt() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        slider1 = new JSlider(0, 100);
        slider1.setValue(33);
        slider1.addChangeListener(this);
        slider2 = new JSlider(0, 100);
        slider2.setValue(33);
        slider2.addChangeListener(this);
        slider3 = new JSlider(0, 100);
        slider3.setValue(33);
        slider3.setEnabled(false);
        sliders = new JPanel();
        sliders.setLayout(new GridLayout(6, 1));
        sliders.add(new JLabel("Vare #1"));
        sliders.add(slider1);
        sliders.add(new JLabel("Vare #2"));
        sliders.add(slider2);
        sliders.add(new JLabel("Vare #3"));
        sliders.add(slider3);
        getContentPane().add(sliders, BorderLayout.CENTER);
        a = new JLabel();
        b = new JLabel();
        c = new JLabel();
        total = new JPanel();
        total.setLayout(new GridLayout(1, 3));
        total.add(a);
        total.add(b);
        total.add(c);
        getContentPane().add(total, BorderLayout.SOUTH);
        pack();
        updateABC();
    }
   
    private void updateABC() {
        int v1 = slider1.getValue();
        int v2 = slider2.getValue();
        int v3 = slider3.getValue();
        int aval = (int) (0.10 * v1 + 0.25 * v3);
        int bval = (int) (0.20 * v1 + 0.10 * v2);
        int cval = (int) (0.15 * v1 + 0.20 * v2);
        a.setText(Integer.toString(aval));
        b.setText(Integer.toString(bval));
        c.setText(Integer.toString(cval));
    }

    public void stateChanged(ChangeEvent e) {
        slider3.setValue(100 - slider1.getValue() - slider2.getValue());
        updateABC();
    }

    public static void main(String[] args) {
        Opt f = new Opt();
        f.setVisible(true);
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester